Как получить смещение метки относительно исходного адреса исполняемого файла во время выполнения? - PullRequest
0 голосов
/ 17 мая 2019

Мой файл test.asm содержит функцию _start, а файл test.c содержит main функцию

Мне нужно получить адрес смещения меток main и _start вмой файл test.asm

, например, если базовый адрес моей программы 0x400000

Я могу получить эффективный адрес main во время выполнения, равный 0x401260, однако как мне рассчитатьсмещение основной функции относительно базового адреса?

то есть 0x401260 - 0x400000 = 0x1260

как мне получить значение 0x1260, которое является смещением для функции main в спазме?То же самое для функции _start

Я пытался:

mov rdi, main
mov rsi, _start
sub rsi, main
call poly

Как вы можете видеть, я могу получить полный адрес таким образом, однако как мне получить смещения для вышеуказанных функций вотносительно базового адреса?

Редактировать: У меня фактически есть вариант использования для этого

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

Мой реплицируемый вирус работает следующим образом: 1) Запустите virus.exe

2) Базовый адрес virus.exe: 0x400000 знает, что это «главный» адрес, и начинает расшифровку «основного» * ​​1036.* до 'main.end' 0x402260 и вирус делает неприятные вещи

3) теперь virus.exe хочет копировать и трансформироваться, поскольку такой virus.exe открывает файл-вирус virusororder для расшифровки зашифрованной области, генерируетновая процедура дешифрования и запишите новую зашифрованную область и соответствующую схему дешифрования в файл virus.exe.Файл virus.exe читается в выделенной памяти, эта память начинается с 0x40b620.Virus.exe должен сначала расшифровать зашифрованную область «main» до «main.end» в открытом файле virus.exe, так как такой вирус.exe должен знать смещение, в котором находится функция «main».ПРОБЛЕМА !!так как выделенная память открываемого файла virus.exe начинается с другого смещения b620 относительно базы текущего запущенного virus.exe как такового для доступа к начальной точке функции main в virus.exe, которую мне нужно будет рассчитать 'b620 '+' 1260 'для получения смещения функции main относительно моего базового адреса ИЛИ 0x40b620 + 1260 для получения полного адреса функции' main 'в открытом файле virus.exe в памяти.

Один из методов, который может решить эту проблему, - это когда я выделяю память для файла, считываемого в файле test.c, если я могу узнать смещение, которое происходит при запуске программы.Затем я могу использовать это значение, которое будет равно 0xb620, и передать его в качестве аргумента в мой файл test.asm.

БОЛЬШЕ РЕДАКТИРОВАТЬ другое объяснение:

Я создаю полиморфный вирус, которыйделает enc / dec для разделов своего собственного файла, поэтому необходимо открыть собственный файл и работать с ним.скажем, я хочу расшифровать область от A до B в файле, я не знаю адрес A в файле, однако я знаю [current_running_virus_program_base_addr + A] = полный адрес A, так как A является меткой в ​​моем исполняемом файле, поэтому язнать полный адрес A

, скажем так:

текущий запущенный вирус [base_addr + A] = 0x400000

файл, начальный адрес malloc = 0x4068b0

если я знаю разницу 0x68b0

, тогда я могу рассчитать полный адрес функции A в файле вируса следующим образом:

[current_running_virus_program_base_addr + A] + 0x68b0

ЧтоЯ попытался:

Получить мою текущую память для 'main', которая равна 0x401260, и удалить первый символ '4', который дает 0x1260.

...