Мой файл 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.