我使用Visual Studio 2019在C ++中编写了一个简单的程序来学习。当我使用Ghidra打开文件时,似乎无法检测到我的功能,也不知道我在做什么错。

我的程序很简单:

#include <iostream>

void someFunction()
{
    printf("im scared world, i dont understand.\n");
}

int main()
{
    std::cout << "hello world" << '\n';

    someFunction();

    system("pause");

    return 0;
}


但是主要功能在Ghidra中是这样的:节目

int __cdecl _main(int _Argc,char **_Argv,char **_Env)

{
  char cVar1;
  char *unaff_EBP;
  basic_ostream<char,struct_std::char_traits<char>_> *in_stack_fffffff8;

  cVar1 = (char)unaff_EBP;
  operator<<<struct_std::char_traits<char>_>(in_stack_fffffff8,unaff_EBP);
  operator<<<struct_std::char_traits<char>_>(in_stack_fffffff8,cVar1);
                    /* Symbol Ref: No symbol: someFunction */
  _printf("im scared world, i dont understand.\n");
  system("pause");
  return 0;
}


为什么?我该怎么办才能解决此问题?

评论

您可以告诉Visual Studio不要优化代码并自动内联函数。使用/ Od编译参数。

#1 楼

Visual Studio内联了该功能。您将需要告诉VS不要这样做:

__declspec(noinline) void someFunction()
{
    printf("im scared world, i dont understand.\n");
}