x86 NASM更改未作为参数传递的地址的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了x86 NASM更改未作为参数传递的地址的值相关的知识,希望对你有一定的参考价值。

我注意到NASM汇编代码中scanf的一些特殊行为。我有两个scanf调用:

mov rdi, fmt
mov rsi, r14
call _scanf

mov rdi, fmt
mov rsi, r15
call _scanf

其中fmtdata部分宣布为:

section .data
fmt: db "%d", 0

在第一个scanf之前,r14和r15中的地址是:

r14 = 0x0000000000002104
r15 = 0x0000000000002105

在LLDB中,在这些地址中的任何一个上执行me read -fd -c1输出0。

在为第一个scanf输入“2”后,值得信赖的是0x0000000000002104中的值2。

在为第二个scanf输入“2”后,0x0000000000002105中的值为2.但是,现在0x0000000000002104中的值为514。

我在其他地方打电话给scanf后会遇到类似的记忆变化,如果需要的话会重现它们,但想知道是否有人经历过这种情况。

答案

以前,我使用%d作为scanf的格式,读取4个字节。但是,r14和r15中的地址仅在bss部分保留1个字节。我更改了这个,以便它们现在保留4个字节,程序按预期工作。

以上是关于x86 NASM更改未作为参数传递的地址的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在汇编程序 x86 函数调用中传递参数?

如何更改作为参数传递的变量的值?

将指向常量的指针作为参数传递时出现问题

有没有办法使用 javascript/Jquery 将未提交的输入字段的值属性作为 URL 的参数传递?

在角度2中传递更改事件的参数

assembly x86(nasm)选择排序