Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2010, 10:41   #1
FRIZS
Новичок
Джуниор
 
Регистрация: 14.04.2010
Сообщений: 2
По умолчанию Как праильно посчитать опкод?

Вопрос в следующем есть сall который переходит на определенный адрес:

FF /2 CALL 0x0c123456

Такую запись видел на одном из сайте. Вот как эту запись перевести в опкод??
FRIZS вне форума Ответить с цитированием
Старый 14.04.2010, 11:05   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Берете таблицу опкодов для нужной архитектуры, учитываете некоторые моменты (разрядность, префиксы, модель памяти...) и получаете.
p51x вне форума Ответить с цитированием
Старый 14.04.2010, 16:02   #3
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

+можно загнать в отладчик(к примеру OllyDbg) и посмотреть напротив листинга дизассемблера на каждую команду
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 15.04.2010, 06:07   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от FRIZS
Вопрос в следующем есть сall который переходит на определенный адрес: FF /2 CALL 0x0c123456
Такую запись видел на одном из сайте. Вот как эту запись перевести в опкод??
FRIZS
FF /2 это и есть опкод инструкции CALL внутри текущего сегмента, косвенная адресация адреса перехода через ячейку памяти
в двоичном виде выглядит так
1111.1111 mod 010 r/m
например
Код:
.code
call X
...
.data
X dd 12345678h
под дебагером это выглядит вот так
в hex: FF15CC004000 ; call dword ptr [004000CCh]
в bin: 1111.1111.00. 010.101.1100.1100.0000.0000.0100.00 00.0000.0000
F F mod =00 2 r/m=101
поле mod задает что именно кодируется в r/m, если mod =00 и r/m=101 тогда следующие 4 байта непосредственный адрес в памяти

Последний раз редактировалось Mikl___; 15.04.2010 в 06:15.
Mikl___ вне форума Ответить с цитированием
Старый 15.04.2010, 11:20   #5
FRIZS
Новичок
Джуниор
 
Регистрация: 14.04.2010
Сообщений: 2
По умолчанию

Mikl___ спасибо за хорошее разъяснение
FRIZS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как праильно воспользоваться функцией GetFileTime Assemblerru Общие вопросы C/C++ 0 27.03.2010 20:35
как посчитать арктангенс? Yura_n Общие вопросы C/C++ 1 18.06.2009 17:38
Как посчитать дни? Sergius X SQL, базы данных 6 26.05.2009 18:15
Как посчитать Kovalenko.lokal БД в Delphi 16 07.05.2008 17:50
Как посчитать матрицу? RECREATOR Помощь студентам 8 30.11.2007 07:10