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

Discussion in 'WASM.BEGINNERS' started by Antolflash, Feb 26, 2009.

  1. Antolflash

    Antolflash New Member

    Blog Posts:
    0
    Joined:
    Dec 14, 2008
    Messages:
    167
    как я понял первый байт этой команды EB, а вот второй от чего-то зависит, наверно от IP, но как?
    Понимаю, что это нафиг не надо, но любопытство - не порок.
     
  2. leo

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    А в мануальчик заглянуть не судьба или религия не позволяет ? ;)
    В относительных (relative) jmp и call второй байт (или дворд) это +- смещение адреса, на который происходит переход, относительно адреса команды, следующей за jmp или call
     
  3. max7C4

    max7C4 New Member

    Blog Posts:
    0
    Joined:
    Mar 17, 2008
    Messages:
    1,203
    Ну у EB - только байт (знаковое смещение относительно адреса байта следующего за командой, +127/-128 байт), а вот у E9 - уже word/dword. У EA даже больше. Там аж до 6 байт, правда это уже не относительный адрес, а абсолютный (сегмент:смещение)
     
  4. Antolflash

    Antolflash New Member

    Blog Posts:
    0
    Joined:
    Dec 14, 2008
    Messages:
    167
    Спасибо, т.е. f4 - это на 12 байт вверх по коду, так?
     
  5. leo

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    Так, но относительно следующей команды, а относительно адреса самого jmp на 12-2=10 байт
     
  6. Mikl___

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    Joined:
    Jun 25, 2008
    Messages:
    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