実験その2です、今度は call 部分を外出しにします。
call.asm
BITS 32
global call_func
call_func:
push ebp
mov ebp, esp
sub esp, 8
mov eax, dword [ebp + 8]
call eax
leave
retnasm -felf call.asm -o call.o
main.cpp
extern "C" void call_func(unsigned int func);
void hello()
{
printf("hello\n");
}
int main(int argc, char *argv[])
{
unsigned int f = (unsigned int )hello;
call_func(f);
return 0;
}g++ -c main.cpp
結果
nobita% g++ main.o call.o -o hoge nobita% ./hoge hello
うまくいきました。