如何在特定地址下编译C函数Visual C ++

时间:2018-07-28 18:09:43

标签: c++ c visual-c++ compilation reverse-engineering

我正在使用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内的特定地址处归档函数编译?

0 个答案:

没有答案