小编her*_*men的帖子

在c中执行字符串的内容

#include<stdio.h>
#include<stdlib.h>

char code[] ="\x52\x56\x57\x50\xB8\x41\x00\x00\x00\x50\xB8\x01\x00\x00\x00\xBF\x01\x00\x00\x00\x48\x89\xE6\xBA\x01\x00\x00\x00\x0F\x05\x58\x58\x5F\x5E\x5A\xC3";

int main(){
    void(*func)() = (void (*)())code;
    (*func)();
    return 0 ;
    
}
Run Code Online (Sandbox Code Playgroud)

我这里有一个字符串,它存储一个二进制代码来打印一个字符 ('A') ,我将它作为函数指针传递给 func ,而不是我尝试执行它。输出 :

$ ./test
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

这是汇编代码:

0:  52                      push   rdx
1:  56                      push   rsi
2:  57                      push   rdi
3:  50                      push   rax
4:  b8 41 00 00 00          mov    eax,0x41
9:  50                      push   rax
a:  b8 01 00 00 00          mov    eax,0x1
f:  bf 01 00 00 00          mov    edi,0x1
14: 48 89 e6                mov    rsi,rsp
17: …
Run Code Online (Sandbox Code Playgroud)

c linux string assembly segmentation-fault

3
推荐指数
1
解决办法
96
查看次数

标签 统计

assembly ×1

c ×1

linux ×1

segmentation-fault ×1

string ×1