Нужна интерпретация кода C в IDA Pro
Я использую IDA Pro для дизассемблирования следующего кода на C: Однако, глядя на разборку ниже, она кажется мне неполной. Данные никогда не инициализируются (согласно коду C), даже если они загружаются в стек, однако процедура (nullsub_1), расположенная в 00401040, не использует данные? Я делаю правильную оценку или я что-то упускаю??? Я использовал Visual C++ 6/2005 для компиляции кода C.
#include <stdio.h>
#include <windows.h>
struct a
{
char s[10];
BYTE b;
int i;
};
a al;
void init(a);
void main()
{
init(al);
};
void init(a c)
{
for(int j = 0; j < 10; j++) c.s[j] = 'A';
c.b = 10;
c.i = 10000;
};
.text:00401000 ; int __cdecl main(int argc,const char **argv,const char *envp)
.text:00401000 _main proc near ; CODE XREF: start+AFp
.text:00401000
.text:00401000 argc = dword ptr 4
.text:00401000 argv = dword ptr 8
.text:00401000 envp = dword ptr 0Ch
.text:00401000
.text:00401000 mov ecx, dword_4084C0
.text:00401006 mov edx, dword_4084C4
.text:0040100C sub esp, 10h
.text:0040100F mov eax, esp
.text:00401011 mov [eax], ecx
.text:00401013 mov ecx, dword_4084C8
.text:00401019 mov [eax+4], edx
.text:0040101C mov edx, dword_4084CC
.text:00401022 mov [eax+8], ecx
.text:00401025 mov [eax+0Ch], edx
.text:00401028 call nullsub_1
.text:0040102D add esp, 10h
.text:00401030 retn
.text:00401030 _main endp
.text:00401030
.text:00401030 ;
.text:00401031 align 10h
.text:00401040
.text:00401040
.text:00401040
.text:00401040 nullsub_1 proc near ; CODE XREF: _main+28p
.text:00401040 retn
.text:00401040 nullsub_1 endp
1 ответ
Ваш исходный код не имеет побочных эффектов, кроме записи в память. Компилятор исключает эти записи как бесполезные.
Возможно, вам повезет больше, если вы скомпилируете его в режиме отладки (вместо Release) или отключите некоторые оптимизации компилятора.
Кроме того, доступ к переменным, определенным как volatile
будет сохранен, так что вы можете добавить volatile
в вашем коде.