Сейчас на форуме: asfa, Rio, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Вопрос по IDA
Посл.ответ Сообщение

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 января 2013 22:30
· Личное сообщение · #1

Добрый день.
Вопрос такой. Как правильно указать ссылку на функцию Call в адрес .text:082D9C4C, а то прыгает в другое место
call sub_859BC8D
E8 2D 9C 4C 00

попадает суда:
.text:0859BC8D sub_859BC8D proc near ; CODE XREF: gnpc_imp::DispatchExp(XID &,int &,int &,int &,XID &,int &,int &)+51p
.text:0859BC8D
.text:0859BC8D var_C = dword ptr -0Ch
.text:0859BC8D
.text:0859BC8D sub esp, 8
.text:0859BC90 mov eax, 45FA0000h
.text:0859BC95 push eax ; float
.text:0859BC96 push dword ptr [ebp+0Ch]

а нужно чтоб суда прыгало на эту функцию:

.text:082D9C4C ; ONET::Conf::dump(_IO_FILE *)
.text:082D9C4C public _ZN4ONET4Conf4dumpEP8_IO_FILE
.text:082D9C4C _ZN4ONET4Conf4dumpEP8_IO_FILE proc near
.text:082D9C4C
.text:082D9C4C var_8 = word ptr -8
.text:082D9C4C var_6 = word ptr -6
.text:082D9C4C var_4 = dword ptr -4
.text:082D9C4C arg_0 = dword ptr 8
.text:082D9C4C arg_4 = dword ptr 0Ch
.text:082D9C4C
.text:082D9C4C push ebp
.text:082D9C4D mov ebp, esp
.text:082D9C4F sub esp, 8
.text:082D9C52 mov eax, offset _ZN15player_template9_instanceE ; player_template::_instance
.text:082D9C57 mov [ebp+var_4], eax
.text:082D9C5A mov edx, [ebp+arg_0]
.text:082D9C5D mov eax, [ebp+arg_0]
.text:082D9C60 fild dword ptr [eax]
.text:082D9C62 mov eax, [ebp+var_4]
.text:082D9C65 fld dword ptr [eax+18ACh]
.text:082D9C6B fld1
.text:082D9C6D faddp st(1), st
.text:082D9C6F fmulp st(1), st
.text:082D9C71 fnstcw [ebp+var_6]
.text:082D9C74 mov ax, [ebp+var_6]
.text:082D9C78 mov ah, 0Ch
.text:082D9C7A mov [ebp+var_8], ax
.text:082D9C7E fldcw [ebp+var_8]
.text:082D9C81 fistp dword ptr [edx]
.text:082D9C83 fldcw [ebp+var_6]
.text:082D9C86 mov edx, [ebp+arg_4]
.text:082D9C89 mov eax, [ebp+arg_4]
.text:082D9C8C fild dword ptr [eax]
.text:082D9C8E mov eax, [ebp+var_4]
.text:082D9C91 fld dword ptr [eax+18B0h]
.text:082D9C97 fld1
.text:082D9C99 faddp st(1), st
.text:082D9C9B fmulp st(1), st
.text:082D9C9D fldcw [ebp+var_8]
.text:082D9CA0 fistp dword ptr [edx]
.text:082D9CA2 fldcw [ebp+var_6]
.text:082D9CA5 leave
.text:082D9CA6 retn
.text:082D9CA6 _ZN4ONET4Conf4dumpEP8_IO_FILE endp

Все перепробовал попадает в другие места но не на эту функцию, помогите решить проблему, заранее спасибо.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 31 января 2013 22:34 · Поправил: reversecode
· Личное сообщение · #2

обзавестись мануалом по ассемблеру и прочитать главу посвященную комманде call
http://faydoc.tripod.com/cpu/call.htm

к IDA не имеет никакого отношения

| Сообщение посчитали полезным: erinil

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 января 2013 22:37
· Личное сообщение · #3

а не могли бы вы дать ссылочку на мануал?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 31 января 2013 22:58
· Личное сообщение · #4

В гугл сходить никак? Хотя бы гугл Intel® 64 and IA-32 Architectures Software Developer’s Manual второй том.



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 февраля 2013 00:41
· Личное сообщение · #5

Арчер спасибо за ответ, но вы направляете на мануал вовсе не для новичков. Реверскоде прочел статью которую вы мне дали ссылку узнал про типы call, но так и не понял на что ссылаться и чем руководствоваться при изменении call чтоб она ссылалась на другую функцию, от куда берутся эти байты E8 2D 9C 4C 00?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 февраля 2013 00:47
· Личное сообщение · #6

на каком языке прочли?

The target operand specifies either an absolute offset in the code segment (that is an offset from the base of the code segment) or a relative offset (a signed displacement relative to the current value of the instruction pointer in the EIP register, which points to the instruction following the CALL instruction)



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 февраля 2013 00:51
· Личное сообщение · #7

на англ.



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

Создано: 01 февраля 2013 01:02 · Поправил: c7111981
· Личное сообщение · #8

erinil, E8 EC 7B 20 00

| Сообщение посчитали полезным: erinil

Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 февраля 2013 01:23
· Личное сообщение · #9

c7111981Спасибо помогло, но так и не понял как вы посчитали смещение?



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

Создано: 01 февраля 2013 01:34
· Личное сообщение · #10

Сами отвечаете на свой вопрос
erinil пишет:
вы посчитали смещение

E8 2D 9C 4C 00 - прыгает со смещением +4C9C2D с адреса 080D2060
считаем разницу между 082D9C4C и 080D2060 получаем 207BEC, вот и получаем
E8 EC 7B 20 00



Ранг: 0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 февраля 2013 01:57
· Личное сообщение · #11

c7111981Спасибо за объяснение еще раз, все я разобрался благодаря вам



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 01 февраля 2013 08:49
· Личное сообщение · #12

Если уж совсем интересно АДРЕС_НАЗНАЧЕНИЯ - АДРЕС_CALL - 5
Магическое 5 - длина команды CALL, т.е. процессор сначала увеличивает EIP на 5, а потом уже считает смещения от нового адреса


 eXeL@B —› Вопросы новичков —› Вопрос по IDA
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати