| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Помогите понять |
| Автор: Kirgston 20.2.2010, 10:55 | ||||
Всем доброго времени суток! Мне предстоит разобраться с чужим кодом. Несколько "недопонимаю" как он работает. Есть ДЛЛ которая "вшывается" в одно приложение. Собственно если я не ошибаюсь область памяти становиться общая. В итоге прямо в памяти мы "фиксим" нужные нам вещи.
То есть я вижу что оно делает так: 1) Создаем массив из разных указанных елементов (тобиш в каждый элемент записываем значение) 2) Адрес 0x0044213E переводим в число типа int 3) в это число записываем наш массив Собственно теперь непонятки... 1) uchar == 1 бит ( то есть 1 элемент если не ошибаюсь 1 бит) собственно int == 4 бита . Массив содержит 6 элементов. 6 элементов == 6 бит. Значит мы уже вылезаем за область int ... я прав? Почему так? Зачем так? 2) Каждое число в НЕХ соответствует определенной команде. То есть число 0x90 соответствует команде "NOP" (ASM) . Откуда я это взял? С исходняка:
Что тогда значит 0xE9 , 0xA2 и зачем писать 0х00 ?? Собственно скрин дампа памяти: http://s005.radikal.ru/i211/1002/7f/f69e75070730.png |
| Автор: Dem_max 20.2.2010, 12:02 | ||
uchar = UCHAR = BYTE = unsigned char
0x0044213E это адрес в памяти, а (int*)0x0044213E указатель на область памяти Что тогда значит 0xE9 , 0xA2 и зачем писать 0х00 ?? Ну кто ж его знает зачем писать, так задумано кодописателем |
| Автор: Dem_max 20.2.2010, 12:28 |
| (int*)0x0044213E нет мы компилятору говорит что это указатель на область памяти |
| Автор: Andrey44 20.2.2010, 14:11 |
uchar != 1 бит uchar == 1 байт int != 4 бита int == 4 байта |
| Автор: bra1ny 20.2.2010, 15:14 |
| хех , как все хорошо запоминается E9 опкод jmp A2 опкод mov addr , al (?)(точно не помню уточните в справочнике). |
| Автор: GoldFinch 20.2.2010, 15:50 | ||||
| bra1ny, e9 это конечно опкод jmp rel32, но те не кажется, что в "e9 a2 00 00 00" a2 - это не опкод, а смещение? вобщем e9 a2 00 00 00 90 это
или
nop скорее всего лишний |
| Автор: bra1ny 20.2.2010, 15:53 |
| Да поторопился , каюсь =) |
| Автор: Kirgston 20.2.2010, 16:39 |
Каюсь =) перепутал, но сути мало меняет... GoldFinch, извините за глупый вопрос... но откуда взялось jmp $+5+0xa2 Ну то есть понял что это смещение... но откуда взялась "5" ? |
| Автор: W4FhLF 20.2.2010, 16:48 |
Размер команды: e9 a2 00 00 00 -- пять байт. |
| Автор: GoldFinch 20.2.2010, 17:15 |
| * смещение считается от конца jmp |
| Автор: Kirgston 20.2.2010, 19:05 |
| Благодарю! А где можно еще почитать о опкодах? Те которые вы писали? |
| Автор: artsb 20.2.2010, 19:52 | ||
http://www.cplusplus.com/reference/clibrary/cstring/memcpy/ |
| Автор: W4FhLF 21.2.2010, 06:26 |
http://www.intel.com/products/processor/manuals/ |
| Автор: bra1ny 21.2.2010, 14:09 |
| Советую заказать бумажные издания,если они еще бесплатные. |
| Автор: Kirgston 23.2.2010, 20:01 |
Там я увидел только СД, где можно найти бумагу? |
| Автор: bra1ny 23.2.2010, 20:19 |
| я заказывал год назад наверное) |
| Автор: Kirgston 24.2.2010, 10:26 |
| Спасибо, благодарю! =) может просто распечатаю)))))) |