Форум программистов, компьютерный форум CyberForum.ru

Поиск команд ASM - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удалить из непустого списка L последний элемент. http://www.cyberforum.ru/cpp-beginners/thread783252.html
Прошу помочь решить задачки!:(очень нужно (Билет №15) Удалить из непустого списка L последний элемент. Правила форума
C++ Дана действительная квадратная матрица B порядка n.В каждой строке матрицы найти минимальный элемент и поместить его в вектор D. Прошу помочь решить задачки!:(очень нужно (Билет №6) Дана действительная квадратная матрица B порядка n.В каждой строке матрицы найти минимальный элемент и поместить его в вектор D. Правила форума http://www.cyberforum.ru/cpp-beginners/thread783251.html
C++ В одномерном массиве найти наибольший элемент из эл-тов, имеющий четный номер.Определить, является ли он единственным.
Прошу помочь решить задачки!:(очень нужно (Билет №7) В одномерном массиве найти наибольший элемент из эл-тов, имеющий четный номер.Определить, является ли он единственным. Правила форума
Найти сумму N первых чисел текстового файла, в котором записаны целые числа. C++
Прошу помочь решить задачки!:(очень нужно (Билет №8) Найти сумму N первых чисел текстового файла, в котором записаны целые числа.Если в файле меньше N чисел, найти сумму всех этих чисел в файле. Правила форума
C++ Переменной Т присвоить значение истина, если максимальный элемент одномерного массива единственный и не превосходит наперед заданного числа А http://www.cyberforum.ru/cpp-beginners/thread783245.html
Прошу помочь решить задачки!:(очень нужно (Билет №11) Переменной Т присвоить значение истина, если максимальный элемент одномерного массива единственный и не превосходит наперед заданного числа А Правила форума
C++ Дана действительная матрица А(N*M) и массив В(N).Заменить четные столбцы матрицы на вектор B. Прошу помочь решить задачки!:(очень нужно (Билет №26) Дана действительная матрица А(N*M) и массив В(N).Заменить четные столбцы матрицы на вектор B. Правила форума подробнее

Показать сообщение отдельно
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
11.02.2013, 10:17     Поиск команд ASM
А, вроде понял. Т.е. например в последовательности байт 0xE8, 0x12, 0xA5, 0x00, 0x00 (call sub+_что-то_там со скрина) нужно определить где опкод инструкции call, а где адрес вызываемой процедуры.
Ну да, тут надо знать св-во инструкций. Например в условных переходах "адрес" прыжка на самом деле не адрес, а смещение относительно текущей инструкции. А вот в call как раз адрес, который будет постоянно меняться, т.е. его нужно выкинуть из сигнатуры. Но на самом деле таких инструкций не так много, главное помнить, что адреса в опкодах пишутся после самого опкода инструкции и занимают 4 байта, так что например в вышепреведенном call'e опкод это 0xE8, а адрес процедуры 0x0000A512 (помним про little-endian).

Добавлено через 10 минут
Смотрим Intel manual
Opcode Instruction Description
E8 cd CALL rel32 Call near, relative, displacement relative to next instruction.
Так и есть, опкод 0xE8, но при использовании опкода 0xE8 вместо адреса используется смещение (там есть еще другие опкоды для call, при использовании которых вместо смещения пишется адрес).
Что нам это говорит? А то, что в данном случае смещение для call можно не выкидывать из сигнатуры, т.к. оно не будет менятся при перезагрузке dll.

Цитата Сообщение от Kastaneda Посмотреть сообщение
А вот в call как раз адрес, который будет постоянно меняться
Стоп, я гоню. С чего он менятся то будет в скомпилированом коде? Ни чего меняться не будет, бери байты как есть и все.
 
Текущее время: 23:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru