2010-12-05 129 views
1
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void main() 
{ 
typedef int (FuncPtr)(); 
char asmFunc[] = {0x90, 0xB8, 0x10, 0x00, 0x00, 0x00, 0xC3}; 
FuncPtr *cFunc = malloc(7); 
memmove(cFunc, asmFunc, 7); 
int result = cFunc(); 
printf("result = %d\n", result); 
} 

将是真棒如果有人能解决在英特尔i7处理器的PC汇编的一部分,因为它导致对我的Ubuntu :)汇编代码

段错误这是把汇编代码的最佳方式在交流计划?

+0

虽然我不能说你的操作码是否正确,但我知道它也可能因其他原因而崩溃。你知道你分配的内存是否可以用来执行代码吗?通常你用'malloc`得到的东西不能。 – detunized 2010-12-05 15:39:40

+0

我不知道:) – 2010-12-05 15:48:33

回答

4

将汇编代码放入C源文件的最佳方法是使用内联汇编。这是一个很好的starting point。例如:

int main(void) 
{ 
int x = 10, y; 

asm ("movl %1, %%eax;" 
     "movl %%eax, %0;" 
    :"=r"(y) /* y is output operand */ 
    :"r"(x) /* x is input operand */ 
    :"%eax"); /* %eax is clobbered register */ 
} 
2

可以在不使用typedef的情况下编写它,但在不使用typedef的情况下强制转换为函数指针是非常难看的。

int (*testFuncPtr)(void); 

铸造这个函数指针会使用

(int (*)(void))