问题描述
实际上我正在尝试执行由 Asm x64 中的一个小程序创建的 shellcode,问题是它总是给我一个分段错误错误,即使我的 shellcode 是干净的并且我已经用正确的 C 编译了程序方式。
汇编代码:
global _start
section .text
_start:
jmp code
string: db "Hello world",0xa
code:
add al,1
xor rdi,rdi
add rdi,1
lea rsi,[rel string]
xor rdx,rdx
add rdx,12
syscall
xor rax,rax
add rax,60
xor rdi,rdi
syscall
来自程序集的 Shellcode:
\xeb\x0c\x48\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64\x0a\x04\x01\x48\x31\xff\x48\x83\xc7\x01\x48\x8d\x35\xe4\xff\xff\xff\x48\x31\xd2\x48\x83\xc2\x0c\x0f\x05\x48\x31\xc0\x48\x83\xc0\x3c\x48\x31\xff\x0f\x05
C 代码:
#include<stdio.h>
#include<string.h>
unsigned char code[] = "\xeb\x0c\x48\x65\x6c\x6c\x6f\x20\x77\x6f\x72\x6c\x64\x0a\x04\x01\x48\x31\xff\x48\x83\xc7\x01\x48\x8d\x35\xe4\xff\xff\xff\x48\x31\xd2\x48\x83\xc2\x0c\x0f\x05\x48\x31\xc0\x48\x83\xc0\x3c\x48\x31\xff\x0f\x05";
int main() {
printf("Shellcode Length: %d\n",strlen(code));
int (*ret)() = (int(*)())code;
ret();
}
C 编译命令:
gcc -fno-stack-protector -z execstack execSC.c -o execSC
即使我尝试做一些像 "\x90" 这样简单的事情,我也有同样的问题
如果我尝试用 Python 运行相同的 shellcode,它可以工作并且不会给我分段错误错误
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)