2015-10-18 62 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