- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
format PE GUI at 0x10000
include 'win32a.inc'
invoke MessageBoxA, 0, message, caption, MB_ICONQUESTION + MB_OK
invoke ExitProcess, 0
message db "Just test.", 0
caption db "Test.", 0
data import
library kernel32, 'KERNEL32.DLL', user32, 'USER32.DLL'
import kernel32, ExitProcess, 'ExitProcess'
import user32, MessageBoxA, 'MessageBoxA'
end data
Не пойму, чочему уменьшив базу на 1 программа перестаёт роботать, но собирается нормально. 0x10000 -- это самое маленькое значение с которым она роботать. С 0x0 какая-то ашипка на счет длл лезит.
И ксатати, лоли дебагер почему-то не могет зогружать такие програмым.
До ошибок в винде кто только не доёбывался.
> Кстати, а нет програмки, которая бы по экзешнику говорила, почему он не запускается?
Задача слишком общая. Проверить дллки можно через «Dependency Walker» (хреново работает в новых виндах, «Dynamic-Link Library Redirection» всё ломает), полюбоваться на заголовки — в «CFF Explorer».
Ну и хардкорный вариант: берёшь «x64dbg» (если совсем хардкорщик — «Windbg»), ставишь бряк на «ntdll!LdrInitializeThunk» и отлаживаешь загрузку экзешника с самого начала, обычно достаточно найти сбоящий системный вызов и глянуть на статус. Для упрощения процiдурки можно ещё бряк на «ntdll!RtlRaiseStatus» поставить, но я не помню точно, через какие функции валится загрузка на самых ранних этапах.
В некотором роде да. Он хуёво обрабатывает циклические зависимости во всех этих api-ms-hues-pidoras-1l-0-0.dll, но, тем не менее, его всё ещё можно использовать для поиска неразрешённых импортов.
«NtRaiseHardError».
The preferred address of the first byte of image when loaded into memory; must be a multiple of 64K.
> можно
Низя, обращение к первым 64К всегда вызывает пейджфолт т.к. аллокатор туда ничего не размещает.
Приложению не удалось запуститься, поскольку e run in DOS mode.$ не был найден.
Вчера был другой текст. Какая-то хуйня с таблицей импорта из-за того что я укозал смещение.
Если мне нужно юзать какое-то произвольно больщое непрерывное куско памяти, как это лучше делать?
Копулировать под 64 бита.
В «Макоси» почему-то осилили «Universal binary» и «Fat binary». В эти форматы можно затолкать одновременно код для для «ia32», «x86_64», «Power PC» и «Motorola 68K». Можешь упаковать несколько полноценных экзешников и получить действительно жирную, но портативную программу, которую можно запустить на компах с разными процессорами, а можешь к полноценному добавить заглушки, которые будут пользователю выводит сообщение, что нужен комп с другим процессором или система другой разрядности.
Вика ещё пишет про «FatELF», но этот проект, к сожалению, мёртв.
Хотя сейчас уже и на «Интеле» устройств немало...