Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+6 невидимых)

 eXeL@B —› Программирование —› Делфя пишет левый адрес
Посл.ответ Сообщение


Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 06 августа 2008 12:59
· Личное сообщение · #1

Это сново я, со своей проблемой, пишу такой код в лодере:
xor eax, eax
push offset @stack_overflow3
push fs:[eax]
mov fs:[eax], esp
@stack_overflow1:
call @stack_overflow1
@stack_overflow2:
jmp @stack_overflow2
@stack_overflow3:
pop eax
pop eax
pop esp
@stack_overflow4:

все нормально работает, но в накрытом протом ехе получаю такую бяку, что push offset @stack_overflow3 лежит обсалютно левый адрес но не как не адрес @stack_overflow3. Вчем может заключаться косяк?



Ранг: 15.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 августа 2008 13:23
· Личное сообщение · #2

Ну так когда ты пишешь лоадер в файл, адреса изменяются-то. А команда push offset @stack_overflow3 ложит в стек константу. Вот и получается, что в стек ложится адрес @stack_overflow3, который был в скомпиленом экзешнике, а не который должен быть в накрытом протом экзешнике.




Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 06 августа 2008 13:28
· Личное сообщение · #3

Errins
А пофиксить подобный баг можно как-нибудь?



Ранг: 15.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 августа 2008 13:41
· Личное сообщение · #4

Можно. В своем проте при записи лоадера в файл можешь поправить все необходимые адреса относительно нового адреса. А можешь в самом лоадере получать значение регистра EIP, относительно него и работать. Получить его можно так, например:
call @1
@1:
pop eax
То есть в eax после выполнения такого кода будет находится offset @1.
Но, имхо, первый способ лучше




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 06 августа 2008 14:05
· Личное сообщение · #5

Создаешь список указателей на указатели, которые надо настраивать (ака релоки). И после того, как тебе стал известен адрес куда писать изменяешь эти адреса (настраиваешь). Вообще почитай про релоки.

-----
invoke OpenFire





Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 06 августа 2008 15:05
· Личное сообщение · #6

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




Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 06 августа 2008 22:51
· Личное сообщение · #7

Всем спасибо, в косяке разобрался, всем спасибо за ответы/советы, delta offset рулит. Топ Закрываю.


 eXeL@B —› Программирование —› Делфя пишет левый адрес
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати