相关疑难解决方法(0)

如何制作一个可以运行x86十六进制代码的C程序

我有一个十六进制代码数组,可以转换为汇编指令,我想在C中创建可以执行这些代码的程序.

unsigned char rawData[5356] = {
    0x4C, 0x01, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0C, 0x00, 0x00,
    0x3D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x2E, 0x74, 0x65, 0x78,
    0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0xB4, 0x05, 0x00, 0x00, 0xA4, 0x01, 0x00, 0x00, 0x68, 0x08, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x20, 0x00, 0x30, 0x60,
    0x2E, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, …
Run Code Online (Sandbox Code Playgroud)

c x86 inline-assembly

8
推荐指数
1
解决办法
2860
查看次数

如何从 C / 汇编中的内存地址执行函数?

我有以下汇编函数(已用 objdump 显示)

0000000000000000 <add>:
   0:   b8 06 00 00 00          mov    $0x6,%eax
   5:   c3                      retq  
Run Code Online (Sandbox Code Playgroud)

现在在 CI 中做了以下代码:

#include <stdio.h>

typedef int (*funcp) (int x);

unsigned char foo[] = {0xb8,0x06,0x00,0x00,0x00,0xc3};

int main(void)
{
  int i;
  funcp f = (funcp)foo;
  i = (*f);
  
  printf("exit = %d\n", i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在全局变量 foo 中,我在汇编中输入了我的函数的内存地址并尝试执行它,但它没有按预期返回 6。如何为它们的内存地址执行函数?此外,我可以在哪里研究更多关于该主题的信息?

obs:有时我会遇到 Segmentation fault (core dumped) 错误

c linux x86 assembly disassembly

5
推荐指数
1
解决办法
105
查看次数

标签 统计

c ×2

x86 ×2

assembly ×1

disassembly ×1

inline-assembly ×1

linux ×1