2015-10-18 59 views
1

我在寫一些shellcode,我想知道如何正確調用駐留在libc中的程序集中的函數。注意下面的地址是系統函數的地址。我確定我有這個地址是正確的,因爲如果我用這個地址覆蓋返回地址,系統被調用成功,但它似乎在程序集中的segfault(它包含在緩衝區中)。如果有什麼不清楚的地方,讓我知道。我試圖在一個可執行堆棧上獲得一個libc函數調用,並且在這裏拉我的頭髮。請注意,代碼到達緩衝區沒有問題,並開始通過適當的nop底座,但在調用指令(代碼如下)上發生段錯誤。調用函數在內存地址x86_x64

mov 0xf7ff7fa5b640, %rax 
mov (hex representation of /bin/sh), %rdi 
call *%rax 

回答

0

的問題可能是在

mov 0xf7ff7fa5b640, %rax 

如果拆開這一點,你可能會發現只有一個32位的常數爲符號擴展爲64位。您需要movabs才能使用64位立即數常量(或64位絕對地址)。在Intel/NASM語法中,所有表單都使用mov助記符,但AT & T語法使用movabs