[英]Calling convention for dynamically created function in (Visual) C++
我使用以下类型在运行时创建一个新函数:
typedef int (*pfunc)(int);
union funcptr {
pfunc x;
byte* y;
};
这使我能够在y
编写指令,然后调用这样的函数:
byte* p = (byte*)VirtualAllocEx(GetCurrentProcess(), 0, 1<<16, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
// Write some instructions to p
funcptr func;
func.y = p;
int ret = func.x(arg1); // Call the generated function
了解C ++如何准备参数(调用约定)并因此查找项目属性(Visual C ++)并且我可以看到它使用__cdecl
是至关重要的。 它应该根据以下内容在堆栈上放置参数: http : //msdn.microsoft.com/en-us/library/aa271989 ( v = vs.60) .aspx和http://en.wikipedia.org/wiki/X86_calling_conventions #cdecl但是当我查看生成的程序集时,参数将被移动到EAX寄存器。
我想绝对肯定这些论据是如何准备的。 所以我忽略了一些关于cdecl
东西,或者是Visual C ++优化调用,如果是这样,我如何确保它不会发生?
最诚挚的问候,Lasse Espeholt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.