本文介绍了在汇编AMD64,我调用fprintf但它一直无限循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是一个具有fprintf中,我只是不能把握的问题。也许你可以找到一个解决这个问题。
您看到的,当我调用fprintf它开始无限循环,没有很好的理由。
我不知道发生了什么事情在这里,所以也许你可以给我一只手。
String_int:
91分贝; [
DB 37; %
DB 115;I
93分贝; ]
DB 0; end_stringw_IN_ASCII:
DB 119; W
DB 0; end_string<有的code> MOV RDI,FILE_LOCATION;
MOV RSI,w_IN_ASCII;
调用fopen;
MOV R15,RAX; CMP R15,0; (这个我可以肯定这不是一个NULL)
JE .endProgram; MOV RDI,R15;
MOV RSI,String_int;
MOV RDX,TO_PRINT_LOCATION;
调用fprintf;这是我的code死亡 MOV RDI,R15;
调用FCLOSE;.endProgram:
RET
解决方案
在System V的AMD64 ABI,可变参数的功能期待可变参数在人
的实际数量。我没有看到你设置它。
I'm a having a problem with fprintf which I just can't grasp. Maybe you can find a solution to this problem.
You see, When I call fprintf it starts looping infinitely, for no good reason.I have no idea what's going here, so perhaps you can give me a hand.
String_int:
db 91; "["
db 37; "%"
db 115;"i"
db 93; "]"
db 0; "end_string"
w_IN_ASCII:
db 119; "w"
db 0; "end_string"
<SOME CODE>
mov rdi, FILE_LOCATION;
mov rsi, w_IN_ASCII;
call fopen;
mov r15, rax;
cmp r15, 0; (with this I can be sure it is not a NULL)
je .endProgram;
mov rdi, r15;
mov rsi, String_int;
mov rdx, TO_PRINT_LOCATION;
call fprintf; this is where my code dies
mov rdi, r15;
call fclose;
.endProgram:
ret
解决方案
In System V AMD64 ABI, variadic functions expect the actual number of variadic arguments in al
. I don't see you setting it.
这篇关于在汇编AMD64,我调用fprintf但它一直无限循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!