EDI是ARGC,RSI则argv的获取汇编64的argv [2]地址
0x0000000000400535 <+8>: mov %edi,-0x4(%rbp)
0x0000000000400538 <+11>: mov %rsi,-0x10(%rbp)
在这里我得到的argv指针
(gdb) x/8x $rbp-0x10
0x7ffdb7cac380: 0xb7cac478 0x00007ffd 0x00000000 0x00000003
0x7ffdb7cac390: 0x00000000 0x00000000 0x1f130b45 0x00007ff3
指针0x7ffdb7cac478
所以我的argv [2]在这里:
(gdb) x/8x 0x7ffdb7cac478+16
0x7ffdb7cac488: 0xb7cacd8a 0x00007ffd 0x00000000 0x00000000
在地址0x7f fdb7cacd8a
我需要得到的argv地址[2],所以我想写这汇编代码:
伪代码:
X - 负荷地址$ 8个字节RBP-0x10的//(指针的argv)
ý - 负载从x值的8个字节+ 16 //(指针的argv [2])
我需要稍后JMP为y。
如何在汇编器x64中编写?我可以用于x和y的哪个寄存器?
我希望这是可以理解的。我是一名初学者。
我问这里,因为我不知道从哪里开始做我的研究。
UPDATE:
试过这样:
bits 64
ldr r8, rbp, #0x10
ldr r9, r8, #0x10
jmp r9
但它甚至不编译....我使用NASM。
我想上面是ARM arch,对于amd64(x64)应该这样做。这是对的吗?
更新2:
bits 64
lea r8, [rbp-0x10]
lea r9, [r8+0x10]
jmp r9
更新3:
也不起作用......
bits 64
lea r8, [rbp-0x10]
mov r9, [r8]
mov r10, [r9+0x10]
jmp r10
没有什么比阅读关于您最喜爱的汇编程序的参考寄存器和程序流程。对于用于'x和y'的寄存器,您可以使用任意两个通用寄存器。对于“我如何做到这一点”,答案是尝试,然后发布你的进展,如果你卡住了。 –
这些是我的第一个汇编程序步骤,没有任何最喜欢的参考。你可以指向任何?一个很大的帮助是至少告诉哪个指令将x字节加载到一个地址?是ldr,ldi吗?我应该搜索什么? –
添加我的代码我试过...甚至没有编译:/ –