Здраствуйте,у меня вопрос поповоду стекового кадра.А точнее поповоду переменных которые в нем находяться. Есть две переменные char a[20];char b[20]; Открываю ехе через Ida. Ида показывает такое: .text:00401360 var_28 = dword ptr -28h .text:00401360 s = byte ptr -14h var_28 ето переменная b.28-это начало ее положение в стековом кадре.s это переменная а,ее местоположение начинаеться с 14. Скрин содержимого стека: Скажите пожалуйста,почему var_28 ,она же переменная b занимает 16 байт в стековом кадре а не 19?Куда делось 3 байта?
А функция верно в ida распозналась (начало, конец)? Программа то интерактивная, ждет сотрудничества с пользователем а не тупо автоматом все делает за него. Переменные используются в коде ? Не забываем что компилятор временами оптимизирует код. Надо все учитывать по возможности
Да используються.Вот полній код. Code: #include <iostream.h> extern "C" __declspec(dllexport) Mes(); Mes() { cout<<"Root"<<"\n"; Sleep(INFINITE); } buf() { char a[10]; char b[10]; int i=0; int t; t=(int)&b; cout<<"B"<<"\n"; for(i;i<sizeof(b);i++) { cout<<hex<<"."<<t<<" "<<"b"<<dec<<"["<<i<<"]"<<"\n"; t++; } cout<<"end b"<<"\n"; cout<<"A"<<"\n"; t=(int)&a; i=0; for(i;i<sizeof(a);i++) { cout<<hex<<"."<<t<<" "<<"a"<<dec<<"["<<i<<"]"<<"\n"; t++; } cout<<"end a"<<"\n"; printf("A:");gets(&a[0]); printf("B:");gets(&b[0]); cout<<"A:"<<a<<"\n"; } int main(int argc, char* argv[]) { buf(); cout<<"main"<<"\n"; Sleep(5000); return 0; }
Почему b должна занимать 16 байт? В первом посте вы писали, что определяете два массива по 20 байт - char a[20] и char b[20]. По скрину - IDA все правильно распознала. В стеке располагаются два массива по 20 байт.
я уже все понял.dd-4 байта,db-1 байт итого получиться 20 байт.Я просто незнал что dd 4 байта занимает.И щитал только db.