eXeL@B —› Крэки, обсуждения —› Указатели для асма в дельфи |
Посл.ответ | Сообщение |
|
Создано: 10 января 2006 22:50 · Поправил: Smon · Личное сообщение · #1 Подскажите плс, как в дельфи переориентировать указатель на блок данных (к примеру выделенную память или промэппированный файл) ? Суть в том, что если использовать асмовые вставки (понятные и удобные) то данные берутся прямо из исполняемого файла... Например замена всех $CC на $00: asm mov eax, Size - размер блока mov ecx, 1 //-начало блока - если делать так, то ecx будет указывать на MZ в скомпилированном файле @poisk: // а как тогда переориентировать ecx на блок данных ? сmp ecx,eax je @end cmp [ecx], $CC je @naydeno mov [ecx],$00 inc ecx jmp @poisk @end: end; ЗЫ: есть конечно вариант с массивами, но это слишком геморно при большом кол-ве действий =( типа For I:=1 to MasLength do begin If Mas[I]:=$CC then Mas[I]:=$00 end; ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 10 января 2006 22:57 · Личное сообщение · #2 |
|
Создано: 10 января 2006 22:59 · Личное сообщение · #3 |
|
Создано: 10 января 2006 23:03 · Личное сообщение · #4 |
|
Создано: 10 января 2006 23:19 · Поправил: Smon · Личное сообщение · #5 Всем спасибо, разобрался... =) Скажем через GetMem(Buf,Size) Надо было: mov eax,Buf mov ecx,Size и т.п. С lea что то не вышло =) не туда указывает чтоль, надо в отладчике поглядеть... =) Только вот вопрос один остался, что делать, когда работаем с виртуальными адресами другого исп. файла? открытого скажем через hFile:=CreateFileA(pchar(form1.fileedit.Text), GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ + FILE_SHARE_WRITE, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); ведь они совпадают c самим исполняющимся файлом... =( Придется обязательно копировать в буфер через getmem ? GetMem(Buffer,SizeOfSection); SetFilePointer(hFile,FirstSectionAddr,NIL,FILE_BEGIN); ReadFile(hFile,Buf,SizeOfSection,bread,NIL); asm ...... end; ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 10 января 2006 23:40 · Личное сообщение · #6 |
|
Создано: 10 января 2006 23:55 · Личное сообщение · #7 deNULL пишет: Ну в память же надо как-то данные с диска прочитать. А мне казалось, что SetFilePointer(hFile,FirstSectionAddr,NIL,FILE_BEGIN); - не на диске указатель ставит, а в памяти... или всё же на диске ? ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 11 января 2006 00:11 · Личное сообщение · #8 |
|
Создано: 11 января 2006 00:13 · Личное сообщение · #9 |
eXeL@B —› Крэки, обсуждения —› Указатели для асма в дельфи |
Эта тема закрыта. Ответы больше не принимаются. |