From b825e977f39a236273d1b4e74ebf170e92b987b3 Mon Sep 17 00:00:00 2001 From: Arusekk Date: Sun, 7 Aug 2022 10:56:02 +0200 Subject: [PATCH] shellcraft: fix and optimize itoa Fixes #2073 --- pwnlib/shellcraft/templates/amd64/itoa.asm | 13 ++++++------- pwnlib/shellcraft/templates/i386/itoa.asm | 11 +++++------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/pwnlib/shellcraft/templates/amd64/itoa.asm b/pwnlib/shellcraft/templates/amd64/itoa.asm index c2cba6eef..0737f54a4 100644 --- a/pwnlib/shellcraft/templates/amd64/itoa.asm +++ b/pwnlib/shellcraft/templates/amd64/itoa.asm @@ -35,14 +35,16 @@ assert v in registers.amd64 ${mov('rdi', buffer)} ${mov('rax', v)} push rax /* save for later */ + ${mov('rcx', 10)} ${size_loop}: ${mov('rdx', 0)} - ${mov('rcx', 10)} div rcx - inc rdi + stosb test rax, rax jnz ${size_loop} - dec rdi +## null terminate + std + stosb ## Now we begin the actual division process pop rax ${itoa_loop}: @@ -54,7 +56,4 @@ ${size_loop}: dec rdi test rax, rax jnz ${itoa_loop} -## null terminate - ${mov('rdx', 0)} - mov BYTE PTR [rdi], dl - inc rdi + cld diff --git a/pwnlib/shellcraft/templates/i386/itoa.asm b/pwnlib/shellcraft/templates/i386/itoa.asm index 4d86d0ff4..4747fe35c 100644 --- a/pwnlib/shellcraft/templates/i386/itoa.asm +++ b/pwnlib/shellcraft/templates/i386/itoa.asm @@ -36,14 +36,16 @@ assert v in registers.i386 ${mov('edi', buffer)} ${mov('eax', v)} push eax /* save for later */ + ${mov('ecx', 10)} ${size_loop}: ${mov('edx', 0)} - ${mov('ecx', 10)} div ecx inc edi test eax, eax jnz ${size_loop} - dec edi +## null terminate + std + stosb ## Now we begin the actual division process pop eax ${itoa_loop}: @@ -55,7 +57,4 @@ ${size_loop}: dec edi test eax, eax jnz ${itoa_loop} -## null terminate - ${mov('edx', 0)} - mov BYTE PTR [edi], dl - inc edi + cld