пытаюсь совершить операцию: mov EAX, EIP на что компилятор ругается тогда пытаюсь толкнуть EIP в стек: push EIP тоже облом. А мне очень нужно, чтобы смещения были адресонезависимыми. Т.к. код будет добавляться динамически. И я не знаю, по какому адресу. Что делать? и как тогда вообще пользоваться EIP?
AsMasteR666 А пользоваться поиском хотя бы в пределах wasm.ru/forum не пробовали? Рядом с вашей веткой ветка amvoz которая называется Как привязаться к адресу текущей инструкции? Вирусописатели, блин... систему команд x86 для начала подучите
Вот спасибо! Ссыль реальный! Сам не нашёл, ссори... Но почему сразу вирусы? У вас тут что, только вирусы пишут?? Мой код вполне безобидный (во всяком случае сам по себе). И кстати, на поверку, базозависимый, так что адрес можно и найти! Просто без адресации, мне как то легче живётся. В общем, теперь, с инструкциями в соседней теме, дело хорошо пойдёт!
...Это я виноват, мне надо было вставить в заглавие той темы EIP Тут дело вот в чём. Если набрать в google "как изменить EIP", то можнео, в принципе, наткнуться на строчки типа: "напрямую изменить регистр EIP нельзя" Но, учитывая недоверие местной братии к сообщениям там-то и там-то, хочется прочесть об этом в более или менее серьёзных руководствах. Я, по своему скудоумию пользуюсь двумя. Вот этим http://www.wasm.ru/publist.php?list=23 И вот ещё отсюда скачал http://kalashnikoff.ru/Assembler/prog/assml.exe Это с сайта Калашникова ...Допустим, первое, это беллетристика. Но я гарантирую, что в этой беллетристике НЕ СКАЗАНО, что нельзя писать, к примеру. mov EIP, 4 или add EIP, 4 (На такие случаи я преобразовал все 30 статей в тексовый документ у себя на компе) Зато там написано следующее: "Чтобы изменить его, сделайте следующее: поскольку EIP всегда указывает на инструкцию, которая должна выполниться, то просто выбираем новую инструкцию в листниге После того, как отметили, например, 40101A, кликаем правую кнопку мыши -> “New origin here”, и EIP изменится на 40101A, и таким образом, программа продолжит выполнение именно с этго места." ...Я что должен думать, когда раз за разом вот так вот УДАЧНО изменяется EIP? Я думаю, что изменить его без проблем (последовательное выполнение команд не в счёт, понятно), просто я не умею. Вот и спрашиваю. Далее по электронному варианту. Да и по вcем остальным справочникам тоже. Надобно Вам знать, уважаемый, что в подобных трудах пишется то, что МОЖНО. А то, что нельзя- опускается. ...Я сколько справочников должен скачать, чтобы, наконец, увидеть, что "EIP можно изменить оолько выполняя инструкции"? (И ведь щас найдёт кто-то же, не сомневаюсь в этом) Если Вам препод сказал ЭТО в институте, а потом повторил, а потом ещё и на доске написал (а оно того стоит, на самом деле)- что могу сказать? Мне вотне написал. Потому, что у меня нет препода. Онеситесь спокойно к тому, что некоторые вещи ДОЛЖНО передаваться из уст в уста. Иначе прогресс тормознётся. Мы многое из книжек узнаем, А истины передают изустно: "Пророков нет в отечестве своем",- Да и в других отечествах - не густо.
Один. Мануал от Intel. Или от AMD - кому что нравится. (Intel® 64 and IA-32 Architectures Software Developer’s Manual. Volume 1: Basic Architecture) Пользуйтесь первоисточником и будет вам счастье.
Как изменить EIP не напрямую: допустим вам требуются следующие инструкции MOV, ADD, SUB MOV EIP,400012h используйте PUSH 400012h/RETN SUB EIP,10h используйте JMP $-10h или CALL $-10h ADD EIP,10h используйте JMP $+10h или CALL $+10h MOV EAX,EIP используйте CALL $+5 / POP EAX
Всё это здорово, конечно. Но, как Вы понимаете, интерес представляет четвёртый вариант. Остальные- прыжки (понятно дело, что EIP изменится), а благодаря четвёртому варианту в EAX будет значение EIP! Своё восхищение подобным приёмом я уже высказал в своей теме. А вообще, тему к закрытию, конечно.