Посл.ответ |
Сообщение |
Ранг: 337.6 (мудрец), 224thx Активность: 0.21↘0.1 Статус: Участник born to be evil
|
Создано: 16 сентября 2017 13:14 · Поправил: ajax · Личное сообщение · #1
нужен адрес возврата из процедуры. на x64 может быть дофига прологов, в зависимости от наполнения кодом. каждый раз дебажить/дизасмить и смотреть, что изменилось - не гут.
процедур типа AAA может быть очень много. все с разными параметрами. прежде, чем отвечать, вдумайтесь всякие StackBackTrace и т.п. не применимы
----- От многой мудрости много скорби, и умножающий знание умножает печаль | Сообщение посчитали полезным: |
|
Ранг: 275.9 (наставник), 340thx Активность: 0.22=0.22 Статус: Участник RBC
|
Создано: 16 сентября 2017 13:44 · Поправил: Kindly · Личное сообщение · #2
а почему сохранять во временную rax? когда-то под x86 писал примитивнейший код, с записью адреса возврата в свою секцию или в область с атрибутом записи
если задача ajax пишет: нужен адрес возврата из процедуры. то вполне можно финтить и возвращаться по сохраненному адресу.
----- Array[Login..Logout] of Life | Сообщение посчитали полезным: |
Ранг: 337.6 (мудрец), 224thx Активность: 0.21↘0.1 Статус: Участник born to be evil
|
Создано: 16 сентября 2017 13:53 · Поправил: ajax · Личное сообщение · #3
потому что, есть разнообразие, компилер же генерит
это не x86, в чем и нюанс
----- От многой мудрости много скорби, и умножающий знание умножает печаль | Сообщение посчитали полезным: |
Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 16 сентября 2017 15:08 · Личное сообщение · #4
жаль что не msvc там вроде есть https://msdn.microsoft.com/en-us/library/s975zw7k.aspx
| Сообщение посчитали полезным: |
Ранг: 338.5 (мудрец), 348thx Активность: 2.11↗2.42 Статус: Участник
|
Создано: 16 сентября 2017 15:20 · Личное сообщение · #5
ajaxА зачем вам адрес возврата ? Просканить стек и найти указатель на процедурное ветвление очевидно.
----- vx | Сообщение посчитали полезным: |
Ранг: 431.7 (мудрец), 390thx Активность: 0.73↘0.32 Статус: Участник
|
Создано: 16 сентября 2017 16:44 · Поправил: dosprog · Личное сообщение · #6
ajax пишет: процедур типа AAA может быть очень много. все с разными параметрами. .. и с разным количеством локальных переменных..
| Сообщение посчитали полезным: |
Ранг: 52.0 (постоянный), 146thx Активность: 0.03↗0.08 Статус: Участник
|
Создано: 16 сентября 2017 16:55 · Поправил: UniSoft · Личное сообщение · #7
А такое не подойдет?
delphi не юзаю... а в msvc есть функция _ReturnAddress();
| Сообщение посчитали полезным: |
Ранг: 71.2 (постоянный), 33thx Активность: 0.05↗0.12 Статус: Участник
|
Создано: 16 сентября 2017 17:32 · Личное сообщение · #8
Сделать на каждую процедуру ассемблерную обертку, чтобы сохраняла адрес возврата в TLS.
| Сообщение посчитали полезным: |
Ранг: 58.0 (постоянный), 13thx Активность: 0.02↘0.01 Статус: Участник
|
Создано: 16 сентября 2017 20:46 · Личное сообщение · #9
Ты какую проблему-то решить хочешь?
| Сообщение посчитали полезным: |
Ранг: 338.5 (мудрец), 348thx Активность: 2.11↗2.42 Статус: Участник
|
Создано: 16 сентября 2017 23:38 · Личное сообщение · #10
kunixЗамена адреса возврата и сохранение его в локальном хранилище - это техника виксов(маршрутизация) и не совместима с защитой, особенно на 64. Вопрос в том, зачем нужно получать адрес возврата ?
----- vx | Сообщение посчитали полезным: |
Ранг: 337.6 (мудрец), 224thx Активность: 0.21↘0.1 Статус: Участник born to be evil
|
Создано: 17 сентября 2017 09:55 · Личное сообщение · #11
все вышеприведенное не катит. повторю, это x64. клерк - хочу знать, какая из процедур вызвала мою
----- От многой мудрости много скорби, и умножающий знание умножает печаль | Сообщение посчитали полезным: |
Ранг: 52.0 (постоянный), 146thx Активность: 0.03↗0.08 Статус: Участник
|
Создано: 17 сентября 2017 10:41 · Поправил: UniSoft · Личное сообщение · #12
ajaxТак а все-таки чем же не подходит встроенная интринсик функция ReturnAddress? она прекрасно справляется и в x64... активно юзается в том-же system.pas Все же компилятору то лучше знать, где лежит адрес возврата. ну или как альтернатива: AddressOfReturnAddress, в случае если нужен именно адрес где лежит адрес возврата. http://chuacw.ath.cx/blogs/chuacw/archive/2014/05/30/undocumented-delphi-routines.aspx
| Сообщение посчитали полезным: ajax, Gideon Vi |
Ранг: 568.2 (!), 465thx Активность: 0.55↗0.57 Статус: Участник оптимист
|
Создано: 17 сентября 2017 10:48 · Личное сообщение · #13
ajax пишет: какая из процедур вызвала мою Вопрос процедуры вызывающие вашу, всё ваша программа, или могут вашу процедуру использовать другие программы?
----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: |
Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 17 сентября 2017 11:20 · Личное сообщение · #14
ну можно поизвращаться, а что там в делфи макросы есть ? можно нашлепать равного кода где push some_magic_valN; callfunc(); pop; а в callfunc() поискать по стеку и найти пред последнее значение перед some_magic_valN если так неугодны документированы способы))
| Сообщение посчитали полезным: |
Ранг: 337.6 (мудрец), 224thx Активность: 0.21↘0.1 Статус: Участник born to be evil
|
Создано: 17 сентября 2017 11:34 · Поправил: ajax · Личное сообщение · #15
UniSoft офигеть, катит! ClockMan все мое
----- От многой мудрости много скорби, и умножающий знание умножает печаль | Сообщение посчитали полезным: |