"ED!SON (пер. Mr.Boco). Как ломать программы Windows" - читать интересную книгу автора

printf("Your code is: %lu", code);

return 0;
}

Приятных сновидений!


4. КАК РАБОТАЮТ PUSH И CALL КОГДА ПРОГРАММА ВЫЗЫВАЕТ ФУНКЦИЮ
============================================================
Снова взглянем на кусок кода из Task Lock'а:

PUSH 32 ; Макс. длина строки
PUSH EAX ; Адрес текстового буфера
PUSH 000003F4 ; Идентификатор управления
PUSH DWORD PTR [ESI+1C] ; Идентификатор окна диалога
CALL [USER32!GetDlgItemTextA] ; Получает текст

Когда Вы вызываете функцию GetDlgItemTextA из программы на C, вызов
выглядит так:

GetDlgItemTextA(hwndDlg, 0x3F4, buffer, 0x32);
^ [ESI+1C] ^ EAX

PUSH сохраняет данные в области памяти, называемой стеком. В результате
каждого PUSH'а новый кусок данных помещается в верхушку стека и затем
вызываемая функция проверяет, что лежит в стеке и использует эти данные
по своему усмотрению.


5. О ПРОГРАММАХ НА VISUAL BASIC
===============================
EXE файлы, производимые Visual Basic'ом, не являются настоящими EXE. Они
просто содержат код для вызова VBRUNxxx.DLL, который затем читает данные
из EXE и выполняет программу. Такое устройство псевдо-EXE файлов является
также причиной того, что программы на Visual Basic'е такие медленные.
А так как EXE файлы не являются настоящими EXE файлами, Вы не можете
трассировать и дизассемблировать их - Вы найдете вызов функции из DLL
и кучу мусора. И когда Вы будете трассировать такую программу, Вы
"заблудитесь" в DLL.
Решением этой проблемы является декомпилятор. Существует декомпилятор для
программ, написанных на Visual Basic'е версий 2 и 3, созданный кем-то,
называющим себя DoDi. Эта программя является шареварной и ее можно найти
в InterNet'е (см. Приложение C). Для программ, написанных на Visual Basic'е
версии 4 (VB для Windows 95), не существует декомпилятора, насколько мне
известно, хотя я бы хотел, чтобы он существовал. =)

Примечание: Настоящие программисты на пишут на Basic'е. =)