最近我一直在学习做 RE。
我在 10 秒内编写了一个简单的程序,我打算在 IDA 中处理它。
#include <iostream>
int main(int argc, char* argv[])
{
printf("Hello, world!\n");
int i = 0;
if (i == 0)
{
printf("i == 0\n");
}
else
{
printf("i > 0 OR i < 0\n");
}
while (i == 0)
{
printf("I'm a while loop\n");
_sleep(510);
}
}
如您所见,它是主要功能。但是当我进入 IDA 并点击 start 它不是那个功能(假设 start 是主要功能,对吗?)
但是,在单击功能窗口中的一些功能后,我遇到了它。这里是
int __cdecl __noreturn main(int argc, const char **argv, const char **envp)
{
char v3; // ST04_1@1
char v4; // [sp+0h] [bp-4h]@0
char v5; // [sp+0h] [bp-4h]@1
printf("Hello, world!\n", v4);
printf("i == 0\n", v3);
while ( 1 )
{
printf("I'm a while loop\n", v5);
sleep(0x1FEu);
}
}
我已经扭转了大部分。( printf 最初是 sub_50505 或类似的东西)。
然而,出于某种奇怪的原因,它创建了不必要的变量,我很好奇它为什么这样做。它应该只创建一个,即 i。
另外,为什么是 while (1) { ... }
不应该在 while (i == 0) { ... } 之前吗?
我对所有这些问题很好奇。谢谢!对不起,如果他们很傻。我是 RE 的新手!