Ignore invalid specifiers in printf()
This commit is contained in:
@ -78,6 +78,11 @@ printf:
|
|||||||
cmp byte [rdi+1], 's'
|
cmp byte [rdi+1], 's'
|
||||||
je .rep_s
|
je .rep_s
|
||||||
|
|
||||||
|
;--- invalid specifier ---;
|
||||||
|
mov byte [r11], '%'
|
||||||
|
inc r10 ;assuming args were passed for invalid specifiers !
|
||||||
|
jmp .continue
|
||||||
|
|
||||||
;--- %d ---;
|
;--- %d ---;
|
||||||
.rep_d:
|
.rep_d:
|
||||||
cmp r10, 0
|
cmp r10, 0
|
||||||
|
15
tests.asm
15
tests.asm
@ -70,7 +70,7 @@ section .rodata
|
|||||||
msgPuts db NL,NL,"# puts()",NL,EOS
|
msgPuts db NL,NL,"# puts()",NL,EOS
|
||||||
msgPuts1 db "puts() test",EOS
|
msgPuts1 db "puts() test",EOS
|
||||||
; printf()
|
; 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
|
tS1 db "one",EOS
|
||||||
tS2 db "two",EOS
|
tS2 db "two",EOS
|
||||||
tS3 db "three",EOS
|
tS3 db "three",EOS
|
||||||
@ -82,7 +82,7 @@ section .rodata
|
|||||||
tS9 db "noin",EOS
|
tS9 db "noin",EOS
|
||||||
msgPrintf db NL,"# printf()",EOS
|
msgPrintf db NL,"# printf()",EOS
|
||||||
msgPrintf1 db "TEST printf()",NL,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
|
msgPrintf2b db "Return value: %d",NL,EOS
|
||||||
; min() / minu()
|
; min() / minu()
|
||||||
msgMin db NL,"# min() / minu()",EOS
|
msgMin db NL,"# min() / minu()",EOS
|
||||||
@ -223,7 +223,7 @@ main:
|
|||||||
lea rdi, [rel msgPrintf1]
|
lea rdi, [rel msgPrintf1]
|
||||||
call printf
|
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]
|
lea rdi, [rel msgPrintf2]
|
||||||
call printf
|
call printf
|
||||||
|
|
||||||
@ -231,15 +231,18 @@ main:
|
|||||||
lea rsi, [rel tS1]
|
lea rsi, [rel tS1]
|
||||||
lea rdx, [rel tS2]
|
lea rdx, [rel tS2]
|
||||||
lea rcx, [rel tS3]
|
lea rcx, [rel tS3]
|
||||||
lea r8, [rel tS4]
|
mov r8, 0
|
||||||
lea r9, [rel tS5]
|
lea r9, [rel tS4]
|
||||||
push tS9
|
push tS9
|
||||||
push qword [rel num1]
|
push qword [rel num1]
|
||||||
push tS8
|
push tS8
|
||||||
push tS7
|
push tS7
|
||||||
|
push 0
|
||||||
push tS6
|
push tS6
|
||||||
|
push tS5
|
||||||
|
push qword [num4]
|
||||||
call printf
|
call printf
|
||||||
add rsp, 40 ;cleanup stack, 8*5
|
add rsp, 8*8
|
||||||
mov rsi, rax
|
mov rsi, rax
|
||||||
lea rdi, [msgPrintf2b]
|
lea rdi, [msgPrintf2b]
|
||||||
call printf
|
call printf
|
||||||
|
Reference in New Issue
Block a user