Посл.ответ |
Сообщение |
Ранг: 0.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 декабря 2004 08:19 · Личное сообщение · #1
Вот, допустим, я попадаю на новую процедуру. Чтобы узнать какая процедура её вызвала я выбираю Find references to/Selected command и меня перебрасывает в вызывающую процедуру. А если их несколько: как поступить в этом случае?
| Сообщение посчитали полезным: |
|
Ранг: 0.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 декабря 2004 08:22 · Поправил: Dex · Личное сообщение · #2
И как мне узнать, что лежит по этому адресу:
push crackme. 00411021?
| Сообщение посчитали полезным: |
 Ранг: 260.3 (наставник), 2thx Активность: 0.12↘0 Статус: Участник PPC-PROTECT author
|
Создано: 17 декабря 2004 08:40 · Личное сообщение · #3
Dex пишет:
И как мне узнать, что лежит по этому адресу:
push crackme.00411021?
пипец  читай доки, глупый вопрос... способов масса, например нажать правой кнопокй и выбрать Follow in Dump
----- Пиво, сиськи, транс | Сообщение посчитали полезным: |
Ранг: 0.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 декабря 2004 08:45 · Личное сообщение · #4
-= ALEX =- пишет:
читай доки
Хе..где ж их найдёшь?
| Сообщение посчитали полезным: |
Ранг: 174.2 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 17 декабря 2004 08:47 · Поправил: deNULL · Личное сообщение · #5
Dex пишет:
Чтобы узнать какая процедура её вызвала я выбираю Find references to/Selected command
Чтобы узнать, какая процедура её вызвала, используй окошко Call Stack (Alt-K)
| Сообщение посчитали полезным: |
Ранг: 174.2 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 17 декабря 2004 08:48 · Личное сообщение · #6
Dex пишет:
Хе..где ж их найдёшь?
Help / Contents
| Сообщение посчитали полезным: |
Ранг: 0.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 декабря 2004 08:53 · Личное сообщение · #7
deNULL пишет:
Чтобы узнать, какая процедура её вызвала
Там написано Stack(00401313), а вызывающая процедура находиться 0040130E т.е. на шаг первее. Эт что, так надо?
| Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 17 декабря 2004 09:01 · Личное сообщение · #8
> А если их несколько: как поступить в этом случае?
Поставить бряки на все и перезапустить программу ну или повторить ситуацию, которая привела к попаданию на искомую процедуру ;)
| Сообщение посчитали полезным: |
Ранг: 174.2 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 17 декабря 2004 09:03 · Поправил: deNULL · Личное сообщение · #9
Dex пишет:
Там написано Stack(00401313), а вызывающая процедура находиться 0040130E т.е. на шаг первее. Эт что, так надо?
Да будет тебе известно, что данные в окне Call Stack берутся из стека, а в стеке хранится адрес возврата, то есть адрес, по которому будет передано управление после RET (на этом, кстати, основано использование команды RET как JMP). При вызове процедуры в стек кладется адрес команды, следующей за CALL.
В окне Call Stack:
Address - адрес на адрес (  ) в стеке
Stack - значение стека по вышеназванному адресу
Procedure / Arguments - адрес и, возможно, аргументы вызываемой процедуры
Called from - адрес, откуда был произведен вызов (CALL ...)
P.S. В OllyDebug двойной щелчок контекстно-зависим. То есть щелкаешь по Address - переходишь в стек; щелкаешь по Procedure / Arguments - переходишь в начало вызываемой процедуры; по Called from - переходишь к адресу вызова.
| Сообщение посчитали полезным: |
Ранг: 0.0 (гость) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 декабря 2004 09:06 · Личное сообщение · #10
deNULL
Всё понял. Теперь знаю.
| Сообщение посчитали полезным: |