x86-64 asm 中的 Shellcode 分段错误,使用 C 但在 Python 中没有

问题描述

实际上我正在尝试执行由 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...