![]() |
1
2
下面是一个使用x86-64的工作示例;可进一步优化尺寸。最后一个0x00 null对于执行外壳代码来说是可以的。 &组装;链接:
代码:
对象转储:
编码提取:还有许多其他方法可以做到这一点。
C外壳代码。c-部分
最终版本:
|
![]() |
2
2
如果
运行您的程序
你也可以
此外,它实际上还能够利用64位进程,其中缓冲区溢出位于内存中32位低位以外的地址。(例如,像堆栈一样)。所以是的,你真的应该停止使用
您还需要在代码运行之前将寄存器归零 ,就像在进程启动时一样,但从其他任何地方调用时都不会。
如果要设置RAX=8,而机器代码中没有任何零字节,可以
将CX设置为
|
![]() |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
![]() |
masec · 是否将EAX复制到RAX高位? 7 年前 |
![]() |
Pushpam Kumar · 从可利用程序运行时出现外壳代码分段错误 7 年前 |
![]() |
RTC222 · CTypes返回值错误 7 年前 |
![]() |
SeanRamey · 汇编指令中冒号(:)的含义未知 7 年前 |
![]() |
Lynx · Ubuntu 16.04服务器amd64安装失败 7 年前 |