|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 5, 2003 19:34:23 Иногда мне приходится писать position-independent code я поступаю следующим образом : определяю где я нахожусь( EIP ) и потом заношу его в EBP, и делаю относительную адресацию через EBP. определяю я EIP следующим образом: push 0xc3 mov eax,esp call eax mov eax,[esp] ( смещение не помню сейчас ) но вот недавно я написал немного по-другому (чисто случайно ) push 0xc3 call esp mov eax,[esp] на моей машине (P4) все работает на ура. но вот довелось запустить на тестовой машине (P2) - и там оно перестало работать. я долго - долго думал и решил отдебажить. оказалось, что по call esp я перехожу не на RET ( 0xc3) а прехожу туда, где адрес возврата. какие мнения у all есть на этот счет?. кстати вопрос - кто какие методы определения EIP использует? |
|
|
Дата: Июн 5, 2003 20:22:50 >кстати вопрос - кто какие методы определения EIP использует? Вообще-то есть классическое: call $+5 pop ebp |
|
|
Дата: Июн 5, 2003 23:13:13 · Поправил: rst мда.. интересный вариант. Жаль раньше не додумался. |
|
|
Дата: Июн 7, 2003 21:34:08 разница в микрокоде call поправляет esp а ты его юзаешь а в курсе в какой последовательности вызываются микроинструкции? mov eip->ss:[esp] jmp reg зависимость по данным = eip а на 4 пне то же самое но зависимость по данным не только по eip а по esp то есть на 2 пне пень следил чтоб не записали в еип чего лишнего вообще пожумай какую баговую команду ты придумал call esp -обе микроинструкции зависят друг от друга по данным |
|
|
Дата: Июн 8, 2003 09:20:41 Почему это баговую? очень даже нормальную -)и кстати call не зависит от esp. call esp только использует\изменяет но не более. а работа call зависит от esp только в плане валидности значения регистра - т.е. будет или нет seg_fault |
|
|
Дата: Июн 8, 2003 23:29:32 я те не про call вещаю а про микроинструкции. ты все еще живешь в мире 286х? сall reg= mov ss:[esp],eip sub esp,4 mov eip,reg теперь замени reg на esp и посмотри на код если его выполнят строго по порядку то получишь как раз то что делал Пень 2 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.070 |