对于任务我需要创建简单的shellcode,但不允许它包含\ x80。
注意:要在linux上进行系统调用,比如写入或退出,你需要这一行:int 0x80
,它最终会生成shellcode,包括\ x80。 < / p>
然而我需要进行系统调用,所以我现在的想法是使用一个变量作为中断向量号。例如0x40然后将它乘以2,所以最后在shellcode中将有一个\ x40而不是\ x80。
问题是int没有将变量作为参数,我尝试将其作为测试:
section .data
nr db 0x80
section .text
global _start
_start:
xor eax, eax
inc eax
xor ebx, ebx
mov ebx, 0x1
int [nr]
得到
错误:操作码和操作数的组合无效
我怎么能让我的想法奏效?或者您对此问题有不同的解决方案吗?
PS。 sysenter和syscall不工作 - &gt;非法指令
我在x86-32bit机器上使用nasm。
答案 0 :(得分:2)
也许是这样的,但绝不会在严肃的代码中使用它!
format ELF executable
use32
entry start
segment executable writeable
start:
;<some code>
inc byte [ here + 1 ] ;<or some other math>
jmp here
here:
int 0x7f
segment readable writeable
(这是法典代码)