我正在使用Visual Studio 2017。 我有一个编译的dll,它设置了一些变量,并在像这样加载时在某些地址使用了一些功能:
#define func_address 0xdeadbeef;
typedef int func(int a, int b);
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
func* f = (func*)func_address;
int c = f(3, 1);
break;
}
return TRUE;
}
我需要编译PE,其中特定功能将在特定地址编译,以便在加载dll模块时它将完成其工作:
int func(int a, int b) { /* <= Compile this at address 0xdeadbeef */
return a + b;
}
int main()
{
//somestuff
return 0;
}
我能找到的最有前途的是这种构造,但这似乎仅适用于keil arm编译器http://www.keil.com/support/man/docs/ARMCC/armcc_chr1359124981140.htm:
int func(int a, int b) __attribute__((at(0xdeadbeef)));
所以问题是如何在PE内的特定地址处归档函数编译?