printf(): Print null pointers (arg for %s = 0) as (null), fixes #4
This commit is contained in:
@@ -359,6 +359,21 @@ printf:
|
||||
|
||||
;--- Insert string to buffer ---;
|
||||
.insertString:
|
||||
test rsi, rsi
|
||||
jnz .doInsertString
|
||||
;rsi = NULL:
|
||||
mov r9b, 3
|
||||
cmp r10, printfBuffLen-7
|
||||
je .flushBuffer
|
||||
.flushReturn_3:
|
||||
mov byte [printfBuff + r10], '('
|
||||
mov qword [printfBuff + r10 + 1], 'null'
|
||||
mov byte [printfBuff + r10 + 5], ')'
|
||||
add r10, 6
|
||||
add r11, 6
|
||||
jmp .endInsertString
|
||||
|
||||
.doInsertString:
|
||||
cmp byte [rsi], EOS
|
||||
je .endInsertString
|
||||
mov r9b, 1
|
||||
@@ -409,6 +424,8 @@ printf:
|
||||
je .flushReturn_1
|
||||
cmp r9b, 2
|
||||
je .flushReturn_2
|
||||
cmp r9b, 3
|
||||
je .flushReturn_3
|
||||
|
||||
.wrapup:
|
||||
mov rax, NR_write
|
||||
|
@@ -109,6 +109,8 @@ section .rodata
|
||||
printf16Str db "%x | %#10x | %10x | %#10x | %010x | %#010x\n",EOS
|
||||
printf17 db TAB,"printf(",DQUO,"Ran\dom in\v\a\li%\d test%\n",DQUO,"): ",NL,TAB,TAB,EOS
|
||||
printf17Str db "Ran\dom in\v\a\li%\d test%\n",EOS
|
||||
printf18 db TAB,"printf(",DQUO,"atoi(12345, 9, 0, 0): %s <<should print (null)\n",DQUO,", atoi(12345, 9, 0, 0)):",NL,TAB,TAB,EOS
|
||||
printf18Str db "atoi(12345, 9, 0, 0): %s <<should print (null)\n",EOS
|
||||
; strlen()
|
||||
msgStrlen db NL,"TEST strlen()",NL,EOS
|
||||
strlen1 db TAB,"strlen(str1): %d",NL,EOS
|
||||
@@ -447,10 +449,24 @@ _start:
|
||||
call printf
|
||||
add rsp, SIZE_QWORD * 2
|
||||
|
||||
; TEST 17
|
||||
lea rdi, [rel printf17]
|
||||
call print
|
||||
lea rdi, [rel printf17Str]
|
||||
call printf
|
||||
|
||||
; TEST 18
|
||||
lea rdi, [rel printf18]
|
||||
call print
|
||||
|
||||
mov rdi, 12345
|
||||
mov rsi, 9
|
||||
xor rdx, rdx
|
||||
xor rcx, rcx
|
||||
call itoa
|
||||
lea rdi, [rel printf18Str]
|
||||
mov rsi, rax
|
||||
call printf
|
||||
%endif
|
||||
|
||||
;---
|
||||
|
Reference in New Issue
Block a user