Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在VisualStudioDebugMode中编译的可执行文件:调用中的jmp到函数体而不是直接地址_C++_Visual Studio_Assembly - Fatal编程技术网

C++ 在VisualStudioDebugMode中编译的可执行文件:调用中的jmp到函数体而不是直接地址

C++ 在VisualStudioDebugMode中编译的可执行文件:调用中的jmp到函数体而不是直接地址,c++,visual-studio,assembly,C++,Visual Studio,Assembly,想象一下这个虚假的程序: void foo ( void ) { // anything } int main () { foo (); return 0; } 当使用VisualStudio在调试模式下编译时,编译器会构建某种“函数映射”,或者以调用方式进行编译 因此,例如,当您在调试器中遵循foo()时,或者只是尝试通过&foo检索函数的偏移量时,您会发现自己处于一个jmp的“列表”中,当您再次遵循它们时,它将引导您到实际的函数体 我的问题是: 是否有可能对sin

想象一下这个虚假的程序:

void foo ( void )
{
    // anything
}

int main ()
{
    foo ();
    return 0;
}
当使用VisualStudio在调试模式下编译时,编译器会构建某种“函数映射”,或者以调用方式进行编译

因此,例如,当您在调试器中遵循foo()时,或者只是尝试通过&foo检索函数的偏移量时,您会发现自己处于一个jmp的“列表”中,当您再次遵循它们时,它将引导您到实际的函数体

我的问题是: 是否有可能对single choosen函数禁用此选项,以便&foo将地址返回到函数体,而不是jmp。当然不用禁用调试模式

如果不是,哪个标志为整个程序启用/禁用此功能

提前谢谢

为用户SigTerm编辑: 关闭“增量链接”

你的问题很像这个

“你发现你自己”据我所知,这不会发生,也没有“跳跃列表”。除非你能用一些严肃的例子来支持你的观点,否则我不得不说你可能误解了一些非常基本的东西。。。我很抱歉假设一个能成功回答我问题的人应该知道我在说什么。。。毕竟我不知道正确的术语,这就是为什么我在这里而不是在谷歌上…这是不可能的。当涉及到可动态加载的模块时,对于加载程序来说,这将是太多的工作,其中对动态加载模块中的函数的每个调用都需要修补。相反,只需在导入地址表中修补单个jmp指令就很方便了。对于不保证在任何特定地址加载的可执行文件也是如此。@Superman:这不是dll,那是程序。@Andy:“我正在调试可执行文件中的函数以将其复制出来”这是个坏主意。即使是汇编程序也有编码风格,通过复制机器(并没有大脑)生成的代码,你们将学到更少的东西。多亏了增量链接,这正是我所希望的答案!