The trick писал(а):Проблем не вижу в этом чтобы вывести кнопку полной компиляции.
Не совсем понятно, что значит вывести кнопку полной компиляции... А может, нужно просто снять крыжик в этой (Options > General > Compile > Compile On Demand) опции?
Странно, но у меня ничего не вылетает и нормально работает, если пропатчить процедуру в обычном модуле (у себя в проекте). Может не будет заранее компилироваться в IDE, если процедура находится в другом модуле? В крайнем случае можно просто попробовать ее вызывать перед патчингом...
The trick писал(а):Все пишу по памяти и через телефон, возможно в чем то ошибаюсь, Хакер поправит.
Откуда вы с Хакером все это знаете... Существует ли какой-то аспект в программировании, где вы что-то не знаете?ger_kar писал(а):использую PowerBasic.
Кстати да, очень неплохая вещь
Где-то писали, что он генерирует очень эффективный и быстрый машинный код. Только ему не хватает хорошего IDE-редактора. Да и антивирус на него реагирует (как packed unknown). А так была бы бомбовая вещь... не понимаю, почему он так малопопулярен...
ger_kar писал(а):смотрел только CallWindowProc
DispCallFunc, оказывается, тоже немал) В принципе, можно попробовать сделать свою маленькую и быструю вставку, которая будет джампить по нужному указателю... ведь в стеке уже будут уложены аргументы
ger_kar писал(а):ассемлерная вставка занимает килобайты
Это, наверное, когда она прдставлена в виде DLL? А то как-то много для самой вставки... Самая маленькая вставка у меня занимает размер в пределах 8 байт...
ger_kar писал(а):и виде объектного файла, который на стадии сборки можно скомпоновать в один файл
Но тогда вставку нельзя будет изменять динамически.
ger_kar писал(а):На этапе компиляции этот модуль превратиться в объектный файл и вот тут нужно процесс прервать и подменить этот объектный файл другим подготовленным при помощи того же MASM например. И дальше процесс линковки влинкует его
Какие-то сложные малопонятные манипуляции для всего-лишь какой-то небольшой вставочки, мне так кажется... Можно ведь просто выделить исполняемую память и формировать затем вставку в ней. Или это плохой путь?
Только вот не знаю следующие моменты:
1. Как поступить лучше - через HeapAlloc новый кусок выделять или у байтового массива (Arr() As Byte, созданного в VB) просто изменить атрибуты (чтобы можно было исполнять) через VirtualProtect...
2. Где именно HeapCreate создает кучу, в том адресном пространстве, откуда был вызван, или куча теоретически может появиться где-то еще? Или тогда лучше использовать GetProcessHeap?
3. Если был выделен новый участок через HeapCreate и приложение вдруг обрушилось (в процессе исполнения вставки, например), будет ли этот выделенный участок уничтожен вместе в падением, или так и останется висеть?
4. DEP-Unsafe обрушение происходит только если DEP включен аппаратно? Дело в том, что при программном DEP у меня ничего не обрушается...