eXeL@B —› Вопросы новичков —› Mips разное значение hex |
Посл.ответ | Сообщение |
|
Создано: 12 июня 2016 21:38 · Личное сообщение · #1 Здравствуйте. Ковыряя модуль ядра под mips , обнаружил, что некоторые команды в hex почему-то разные. К примеру, text:00001C04 la $v0, loc_7B34 в IDA в hex выглядит как 00001C04 3C 02 00 00 24 42 7B 34 если же взять HxD или что-то другое и залезть в файл, то картина будет такая: 3C 02 00 00 24 42 C7 F0 , то есть отличие в последних двух байтах. Почему это так ? IDa Version 6.8.150423 (64-bit) Win7 64-bit Спасибо |
|
Создано: 12 июня 2016 21:51 · Личное сообщение · #2 |
|
Создано: 12 июня 2016 21:55 · Личное сообщение · #3 |
|
Создано: 12 июня 2016 22:19 · Личное сообщение · #4 это ида патчит релок https://www.onlinedisassembler.com/odaweb/lC4CVTQz/0 FFFFFFFFFFFFC7F0 (-14352) Code:
| Сообщение посчитали полезным: YellowKlen |
|
Создано: 12 июня 2016 22:47 · Личное сообщение · #5 |
|
Создано: 12 июня 2016 23:04 · Поправил: plutos · Личное сообщение · #6 YellowKlen пишет: что такое релок? Для начала нужно изучить PE file format. (ссылок полно, уроки Iczelion'a) Потом глянуть ну хотя бы тут: http://stackoverflow.com/questions/17436668/how-are-pe-base-relocations-build-up или тут: http://www.codeproject.com/Articles/12532/Inject-your-code-to-a-Portable-Executable-file#ImplementRelocationTable7_2 ----- Give me a HANDLE and I will move the Earth. | Сообщение посчитали полезным: YellowKlen |
|
Создано: 12 июня 2016 23:33 · Личное сообщение · #7 |
|
Создано: 12 июня 2016 23:59 · Личное сообщение · #8 вообще у меня сомнения это релок или это значение .text:00001C04 la $v0, loc_7B34 ??? может там и значение должно быть а ида запатчила как релок .text:00001C0C sw $v0, 0x60($s3) .text:00001C10 li $v0, 0x7F # '' .text:00001C14 sw $v0, 0x110($s3) .text:00001C18 lui $a1, (asc_11DAC >> 16) # " " .text:00001C1C li $v0, 0x64 # 'd' .text:00001C20 sw $s0, 0x64($s3) Добавлено спустя 8 минут есть соурс от этого модуля ? это процедура ath9k_init_misc в ней там инициализация бмака и перед эти 7F это #define ATH_RSSI_DUMMY_MARKER 127 memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN); ????????? common->last_rssi = ATH_RSSI_DUMMY_MARKER; а вот что перед эти хз Добавлено спустя 8 минут адрес там или число |
|
Создано: 14 июня 2016 09:01 · Поправил: DenCoder · Личное сообщение · #9 Писал писал тогда, но день новый настал - 13е, и сначала интернет отвалился, а потом и exelab лёг... Старая привычка копировать текст в буфер перед отправкой спасла текст. Делаю репост. Но исследований почти больше не проводил, оставляю так, как написал 13го в первом часу. Ключ ко всему в $s3, что есть указатель на структуру. Что там по смещению 0x60? Code:
другая большая подструктура Code:
и одна маленькая, в которой в структуре timer_list сохраняется это значение Code:
----- IZ.RU |
|
Создано: 14 июня 2016 09:03 · Личное сообщение · #10 Code:
Если структура была б в точности такая же хотя б до смещения 0x60, то 0x7B34 был бы адрес функции, void (*function)(unsigned long), ath_hw::common.ani.timer.function. Но похоже, структура изменена и догадаться как - можно по функциям, использующим структуру. С исходником лучше структуры нашёл здесь http://lxr.free-electrons.com/source/drivers/net/wireless/ath/ath9k/main.c?v=4.1#L730 Судя по найденному, и по названию - это имеет какое-то отношение к драйверу wi-fi? ----- IZ.RU | Сообщение посчитали полезным: YellowKlen |
|
Создано: 14 июня 2016 15:41 · Личное сообщение · #11 конечно это драйвер wifi атероузовский понять что там в 60 смещени можно только если все разбирать, а так лень угадывать | Сообщение посчитали полезным: YellowKlen |
|
Создано: 14 июня 2016 21:53 · Личное сообщение · #12 Спасибо большое всем. Да, это драйвер wifi это OpenWrt. вот кусочек кода того места. (кстати как тут красиво код вставить..) static void ath9k_init_misc(struct ath_softc *sc) { struct ath_common *common = ath9k_hw_common(sc->sc_ah); int i = 0; setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc); sc->last_rssi = ATH_RSSI_DUMMY_MARKER; sc->config.txpowlimit = ATH_TXPOWER_MAX; memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN); sc->beacon.slottime = ATH9K_SLOT_TIME_9; for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) sc->beacon.bslot[i] = NULL; if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) sc->ant_comb.count = ATH_ANT_DIV_COMB_INIT_COUNT; sc->spec_config.enabled = 0; sc->spec_config.short_repeat = true; sc->spec_config.count = 8; sc->spec_config.endless = false; sc->spec_config.period = 0xFF; sc->spec_config.fft_period = 0xF; } 0x7B34 в место этого там когда-то стояло вызов колбэка anicalibrate. Я делал попытку убить таймер, но это не удалось. Получилось только подменить вызов колбэка на другую сабрутину. В этом состоянии модуль нормально подгружается и не падает. Правил руками в файле, к сожелению вызываться стала не та сабрутина, которую я планировал, но она тоже решила поставленную задачу. Я конечно надеюсь, что читая это вы тихо прётесь, но мне просто некуда было деваться. Я не вводил в заблуждение, но лазая по коду при помощи IDa , я нашёл ещё несколько мест где значение хекса в IDE не соответсвует хексу в файле, вот и решил спросить в чём штука. В оле я такого не замечал. Но оля не работает с файлами такого типа. |
|
Создано: 14 июня 2016 22:57 · Личное сообщение · #13 тьфу ты нуты, так там функа уже перебита, а я то думаю чего она в какой то бред указывает а какой смысл убивать таймер ? берите сорус и пересобирайте под себя, зачем этот секс в бинари правками | Сообщение посчитали полезным: DenCoder |
|
Создано: 15 июня 2016 08:32 · Личное сообщение · #14 так получилось, что скомпилировать модуль не получилось, так как изначально была использованна бинарная прошивка, неизвестно, какие патчи накладывались и какое использовалось окружение. Перезаливать вновь собранную прошивку нет возможности, поэтому пришлось править руками. Таймер дёргает постоянно функцию колибровки, которая изменяла силу сигнала, что сводило работу к чертям. Важно, чтобы сила сигнала была постоянной, мы просто замеры делаем при помощи вайфая. Поэтому и пытался его грохнуть. |
eXeL@B —› Вопросы новичков —› Mips разное значение hex |