1
0x08048c62 <+0>: sub $0x2c,%esp
0x08048c65 <+3>: lea 0x1c(%esp),%eax
0x08048c69 <+7>: mov %eax,0xc(%esp)
0x08048c6d <+11>: lea 0x18(%esp),%eax
0x08048c71 <+15>: mov %eax,0x8(%esp)
0x08048c75 <+19>: movl $0x804a73d,0x4(%esp)
0x08048c7d <+27>: mov 0x30(%esp),%eax
0x08048c81 <+31>: mov %eax,(%esp)
0x08048c84 <+34>: call 0x80488d0 <[email protected]>
=> 0x08048c89 <+39>: cmp $0x1,%eax
如何在最后一条指令中打印出$0x1
处的内容? 我尝试了所有组合gdb:如何打印ASM内存地址的值
x/d 0x1
x/d $0x1
x/s $0x1
...
...
但我要么得到 错误:在地址为0x1不能访问存储器,或值不能转换成整数(甚至当我尝试改变类型为C,S,X,A )
最终,我试图找出传递给scanf
的参数,即“%d%d%C”
那么我的问题是现在:我怎么知道什么传递给scanf作为参数,当我没有看到任何推指令? – SSOPLIF 2015-02-06 02:03:04
@filposs查找'mov'到内存地址,例如'(%esp)','4(%esp)'等。这与'push'类似,但不必每次都减少'%esp' 。 – 2015-02-06 02:05:33
你知道它在那里似乎没有任何问题!你介意给我解释一个有洞见的方法来确定吗?所有mov指令中,我怎么知道它的这个? (这是%d%d) – SSOPLIF 2015-02-06 02:06:44