Ignore invalid specifiers in printf()

This commit is contained in:
2025-06-25 14:40:01 +02:00
parent 5ead6ebdb1
commit 36d21ca18b
2 changed files with 14 additions and 6 deletions

View File

@ -77,6 +77,11 @@ printf:
je .rep_c
cmp byte [rdi+1], 's'
je .rep_s
;--- invalid specifier ---;
mov byte [r11], '%'
inc r10 ;assuming args were passed for invalid specifiers !
jmp .continue
;--- %d ---;
.rep_d:

View File

@ -70,7 +70,7 @@ section .rodata
msgPuts db NL,NL,"# puts()",NL,EOS
msgPuts1 db "puts() test",EOS
; printf()
testStr db "Testing: %s, %%, %s, %s, %s, %s, %s, %s, %s, %d, %s",NL,EOS
testStr db "Testing: %s, %%, %s, %s, %f, %s, %d, %s, %s, %x, %s, %s, %d, %s",NL,EOS
tS1 db "one",EOS
tS2 db "two",EOS
tS3 db "three",EOS
@ -82,7 +82,7 @@ section .rodata
tS9 db "noin",EOS
msgPrintf db NL,"# printf()",EOS
msgPrintf1 db "TEST printf()",NL,EOS
msgPrintf2 db "TEST printf(testStr, tS1, tS2, tS3, tS4, tS5, tS6, tS7, tS8, num1, tS9)",NL,EOS
msgPrintf2 db "TEST printf(testStr, tS1, tS2, tS3, invalid1, tS4, num4, tS5, tS6, invalid2, tS7, tS8, num1, tS9)",NL,EOS
msgPrintf2b db "Return value: %d",NL,EOS
; min() / minu()
msgMin db NL,"# min() / minu()",EOS
@ -223,7 +223,7 @@ main:
lea rdi, [rel msgPrintf1]
call printf
; TEST: printf(testStr, tS1, tS2, tS3, tS4, tS5, tS6, tS7, tS8, num1, tS9)
; TEST printf(testStr, tS1, tS2, tS3, invalid1, tS4, num4, tS5, tS6, invalid2, tS7, tS8, num1, tS9)
lea rdi, [rel msgPrintf2]
call printf
@ -231,15 +231,18 @@ main:
lea rsi, [rel tS1]
lea rdx, [rel tS2]
lea rcx, [rel tS3]
lea r8, [rel tS4]
lea r9, [rel tS5]
mov r8, 0
lea r9, [rel tS4]
push tS9
push qword [rel num1]
push tS8
push tS7
push 0
push tS6
push tS5
push qword [num4]
call printf
add rsp, 40 ;cleanup stack, 8*5
add rsp, 8*8
mov rsi, rax
lea rdi, [msgPrintf2b]
call printf