Я компилирую следующую программу с Visual C ++ 10:
include <Windows.h>
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
Sleep( 0 );
return 0;
}
и изучаю разборку.В образе программы много функций времени выполнения C ++.Некоторые функции расположены плотно - за ret
некоторой функции следует первая инструкция следующей функции.Например,
` __declspec(noreturn) void __cdecl __report_gsfailure(ULONGLONG StackCookie)`
заканчивается по адресу 004013B7
(есть инструкция ret
), а адрес 004013B8
содержит некоторую другую функцию, для которой отладчик не может найти источник.Между тем
BOOL __cdecl _ValidateImageBase(PBYTE pImageBase)
заканчивается по адресу 00401554
, но следующая функция
PIMAGE_SECTION_HEADER __cdecl _FindPESection( PBYTE pImageBase, DWORD_PTR rva )
начинается по адресу 00401560
, и между последними двумя адресами существует несколько int 3
инструкций
Почему разница?Почему некоторые функции расположены плотно, а другие разделены недоступным кодом?