машинный аналог jmp адресс

Тема в разделе "WASM.BEGINNERS", создана пользователем Antolflash, 26 фев 2009.

  1. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    как я понял первый байт этой команды EB, а вот второй от чего-то зависит, наверно от IP, но как?
    Понимаю, что это нафиг не надо, но любопытство - не порок.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    А в мануальчик заглянуть не судьба или религия не позволяет ? ;)
    В относительных (relative) jmp и call второй байт (или дворд) это +- смещение адреса, на который происходит переход, относительно адреса команды, следующей за jmp или call
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Ну у EB - только байт (знаковое смещение относительно адреса байта следующего за командой, +127/-128 байт), а вот у E9 - уже word/dword. У EA даже больше. Там аж до 6 байт, правда это уже не относительный адрес, а абсолютный (сегмент:смещение)
     
  4. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Спасибо, т.е. f4 - это на 12 байт вверх по коду, так?
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Так, но относительно следующей команды, а относительно адреса самого jmp на 12-2=10 байт
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Antolflash
    _ 4000C4 <--- адрес метки A1
    4000D0 <---значение в регистре EIP на момент выполнения JMP
    -12 =0F4h<-- смещение
    Число 0F4h получает знаковое расширение и складывается со зна­чением в регистре IP/EIP/RIP
    0F4h-->FFFFFFF4h
    [EIP] = 004000D0
    004000C4<--адрес, на который мы перейдем
    При сложении IP/EIP/RIP со смещением, перенос из старшего разряда IP/EIP игнорируется, поэтому адрес IP/EIP вычисляется по кольцевому принципу в пределах текущего сегмента кода, то есть: 0FFFFFFFFh+0FFFFFFFFh=0FFFFFFFEh