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嗎?我應該搜索什麼? –
添加我的代碼我試過...甚至沒有編譯:/ –