|
Вопрос # 6 195/ вопрос решён / |
|
Здравствуйте, эксперты! Помогите перевести на Pascal:
MOV EBX, [401288]
MOV EAX, DWORD PTR, 401000
MOV EBX, EAX
 |
Вопрос задал: Phantom (статус: Посетитель)
Вопрос отправлен: 13 июня 2012, 19:48
Состояние вопроса: решён, ответов: 1.
|
Ответ #1. Отвечает эксперт: Толяныч
Здравствуйте, Бородеев Илья Вадимович!
Да никак. Паскаль, как и большинство языков программирования, не машинно-ориентированный язык, и не имеет специального регистрового типа данных. Каждый оператор Паскаля транслируется в целую группу машинных инструкций, и указанная строка может быть "кусочком" из этой группы, самостоятельного смысла не имеющим.
Вот напаример как выглядит откомпилированный всего лишь один оператор Паскаля :
http://shot.qip.ru/008C6Z-31appUMXOW/
И тут засылка в ЕАХ - один небольшой фрагмент исполняемого кода этого оператора.
 |
Ответ отправил: Толяныч (статус: 4-ый класс)
Время отправки: 14 июня 2012, 10:43
Оценка за ответ: 5
Комментарий к оценке: то есть одна команда записанная на Паскале переводится в несколько ассемблерных инструкций?
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 15 июня 2012, 20:46; участников в обсуждении: 3.
|
Толяныч (статус: 4-ый класс), 13 июня 2012, 22:22 [#1]:
Бессмысленное сочетание : сначала в ЕВХ записывается что-то из памяти, а уже через одну команду затирается совсем другим содержимым.
Могу на Паскале :
{Полная фигня}
|
|
Phantom (статус: Посетитель), 13 июня 2012, 23:00 [#2]:
а как на Паскале будет выглядеть эта запись: MOV [401800], EAX?
|
|
Вадим К (статус: Академик), 14 июня 2012, 11:02 [#3]:
Содержимое регистра eax записать в память по адресу 401800 (если точнее, то по адресам 401800-401803 - там же 4 байта)
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Толяныч (статус: 4-ый класс), 14 июня 2012, 13:07 [#4]:
Дык ему же нужно на Паскале...
|
|
Phantom (статус: Посетитель), 15 июня 2012, 12:23 [#5]:
а можете привести пример кода на паскале?
|
|
Вадим К (статус: Академик), 15 июня 2012, 12:32 [#6]:
могу, но я думаю, это не то, что нужно.
procedure t(d:integer);
var m:integer absolute $401800;
begin
m := d;
end;
Разъяснение.
Строка var m:integer absolute $401800; заставит разместить переменную по указанному адресу. Запись в эту переменную будет равносильна записи по данному адресу.
А вот процедура имеет один параметр, который будет передан через регистр eax (wiki)
Но это все бред. Полный бред.
паскаль не использует 32битные регистры (если мы говорим о старом борланде).
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Phantom (статус: Посетитель), 15 июня 2012, 12:36 [#7]:
ну это именно как раз что нужно. спасибо!
|
|
Вадим К (статус: Академик), 15 июня 2012, 13:14 [#8]:
А зачем все это нужно? переводите декомпилированный код в паскльный?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Phantom (статус: Посетитель), 15 июня 2012, 13:59 [#9]:
нужно написать плагин для записи в память исполняемого файла (адрес статический) некоторого значения, на паскале.
|
|
Толяныч (статус: 4-ый класс), 15 июня 2012, 17:07 [#10]:
Бородеев Илья Вадимович:
Цитата:
то есть одна команда записанная на Паскале переводится в несколько ассемблерных инструкций?
Да, точнее - машинных команд, минуя ассемблер. В приведенном на рисуночке примере - жирныс шрифтом один оператор Паскаля, а обычным, с 16-ричными цифрами - то, что будет в EXE-шнике.
Вирус пишете ? 
"В память исполняемого файла" -- некорректное выражение. Либо модифицируется исполняемый файл, хранящийся на диске ( хакерские штучки ), либо записывается в адресное пространство ОЗУ, куда загружен исполняемый файл. Во втором случае это делается через функции API для взаимодействия с чужими окнами ( прцессами ), но в этом, увы, я совсем не гуру.
Вадим_К :
Цитата:
m = d;
А это уже не Паскаль
|
|
Phantom (статус: Посетитель), 15 июня 2012, 20:46 [#11]:
да, немножко неправильно выразился хотя в моем случае, записать нужно именно в EXE'шник, загруженным в оперативную память.
|
26 июня 2012, 13:25: Статус вопроса изменён на решённый (изменил модератор DNK)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|