Size: a a a

Ассемблер

2021 July 17

E

Entusiast in Ассемблер
Это не решение
источник

A

Aleksandr in Ассемблер
удовлетворяет заданному ТЗ, про универсальность там ни слова
источник

E

Entusiast in Ассемблер
Чётко сказано - узнать EIP
источник

E

Entusiast in Ассемблер
Это не EIP
Ты понимаешь? Нет?
источник

A

Aleksandr in Ассемблер
я не понимаю где там написано "узнать EIP в любом возможном случае"
источник

A

Aleksandr in Ассемблер
а соответственно задаю кейс сам
источник

E

Entusiast in Ассемблер
Потому что EIP это всегда указатель на инструкцию. Нужно узнать указатель на инструкцию, а не УГАДАТЬ его

Если ты подставил в регистр константу компилятора - ты не узнал EIP, ты только в некоторых случаях его угадал
источник

A

Aleksandr in Ассемблер
я узнал его во всех случаях, когда адрес загрузки фиксированный
источник

E

Entusiast in Ассемблер
угадал
источник

A

Aleksandr in Ассемблер
угадывание подразумевает возможность получения ложного результата при одинаковых исходных
источник

A

Aleksandr in Ассемблер
я же получаю верный результат при одном условии - нет ASLR
источник

P

ProMiNick in Ассемблер
ладно, задача в общем случае не решаема. а частные решения уже были озвучены.
источник

P

ProMiNick in Ассемблер
если не внедрение, и есть релоки, они $ также прорелоцируют
источник

A

Aleksandr in Ассемблер
о, я и забыл про релоки
источник

A

Aleksandr in Ассемблер
тем более
источник

A

Aleksandr in Ассемблер
к слову, при внедрении адрес внедрения в большинстве случаев известен, так что можно реализовать нечто подобное на релоки средствами внедряльщика
источник

E

Entusiast in Ассемблер
Решение в 4 байта, если известно, что после инициализации ОС вызовет call (а она вызовет, потому что после этого вернётся это всё дело к системному выходу потока, и закрытию процесса). Тем самым в ESP у нас указатель инструкции, и прибавляем к нему нужное смещение

easy_ip:
mov     eax, dword[esp+4] ; 4 bytes
;EAX = указатель на easy_ip, который передала ОС
; Остаётся прибавить к нему смещение на нужную инструкцию
источник

E

Entusiast in Ассемблер
Главное только не затереть это переданное смещение на start
источник

J

J in Ассемблер
Зачем нужен nop? Что он делает
источник

E

Entusiast in Ассемблер
Просто ничего. Пример, что если там будет какие-то команды, то я в ebx передаю смещение на нужную мне инструкцию: mov ebx, 5, и вызываю easy_ip, который возьмёт адрес, переданный ОС start, и прибавит к нему смещение
источник