|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 2, 2004 01:06:07 · Поправил: hGoblin Чертово любопытство доканало... :) Ну не могу я не посмотреть на тему не мне адресованную, теперь тоже не усну пока не выскажусь. Извините, если влез куда не надо, но моя душа теперь тоже орет как недорезанный поросенок. Я тут глаянул на отладчик и понял, что: jmp x можно заменить на: add ip,x. Так ли это? Ну какого черта это спрашивать, если можно проверить? Комп под рукой? Тогда Пуск->Выполнить debug.exe, жмем a<Enter>, пишем: add ip,4<Enter> Над результатом помедитировать (с использованием дополнительной литературы), заодно подумать, что если бы такой опкод был - допустим, ip=100. jmp x - ip=x add ip,x (Кощунственно! :) ip = 100+x P.S. debug - классная вещь, пожалуй даже Quantum на некоторые вопросы так не ответит как debug. :) P.P.S Не обижайтесь, ладно? Я ж не со зла, просто надоело смотреть на однокурсников (Факультет информатики!!!), коллег,и прочих, которые не могут без посторонней помощи вычислить 2x+6x и боятся писать программы, потому что могут случайно написать вирус. Поначалу смешно, потом начинает раздражать, сейчас бесит. ... P.P....P.S Если хотите поговорить (об ассемблере, разумеется), - на личку. hgbln (a) ngs.ru |
|
|
Дата: Янв 2, 2004 11:54:33 hGoblin Спасибо за отеческую заботу, но тот же самый вопрос я задаю и тебе. Точнее про смещения и расположения файла в памяти. Я как понимаю файл на диске хранится токо с кодом и не каких смещений там нет. А в отладчике ни чего не вижу так как там появляются смещения, мож какой инструмент, который позволит просмотреть файл на диске. Не только на гугле, но и на яндексе, даже блин на майл заглянул, но ни чего полезного там не нашел. Спасибо за все надеюсь ты поможешь мне разобраться с этим до конца. |
|
|
Дата: Янв 2, 2004 12:35:43 EvilsInterrupt Ну дык это.., файл на диске можешь глянуть WinHex'ом :-) Смещения есть всегда! Тебе знакомы понятия: PE-заголовок, смещение в файле, смещение в памяти ;-) |
|
|
Дата: Янв 2, 2004 15:19:38 8-( Нифига не понимаю! Что значит "никаких смещений нет"!!? 0B20:0100 EB03 jmp 105 0B20:0102 10 db 10 0B20:0103 20 db 20 0B20:0104 FF db ff 0B20:0105 A10201 mov ax,[102] 0B20:0108 03060301 add ax,[103] 0B20:010C 3B060401 cmp ax,[104] 0B20:0110 72F6 jb 108 0B20:0112 CD20 int 20 Напишите программку с шестнадцатью переменными и занесите одну из них в ах. Компиляция. Занесите другую. Компиляция. Третью.... Чем будут различаться шестнадцать программ? мож какой инструмент, который позволит просмотреть файл на диске. Hex Workshop, Lister из TotalCommander'a, WinHex упомянутый, да debug в конце концов... Не только на гугле, но и на яндексе, даже блин на майл заглянул, но ни чего полезного там не нашел. А в "Программирование для дЗенствующих" заглядывали? У вас очень искаженное понятие об этих гребаных смещениях. Будьте добры исправлять. Спасибо за отеческую заботу, но тот же самый вопрос я задаю и тебе. Блин. Когда я говорю, меня не слушают. У меня тихий голос. Когда я пишу, тоже не слушают. Клавиатура маленькая? ЕЩЕ ВОПРОСЫ - НА ЛИЧКУ! Вопросы, на которые я не смогу ответить, - в форум. Кому будет приятно выкачивать обновление оффлайновой версии этого форума, где 50Мб будет занимать один вопрос про смещения в разных интерпретациях? |
|
|
Дата: Янв 3, 2004 00:01:29 Уважаемый hGoblin!!! Или я действительно тупой или эта тема через чур сложна. Но в любом случае надо разобраться до конца. Я задавал: И такое чувство что линкер поставляет смещения токо для данных, а для кода ни фига. Не туплю ли я? Смотрю на приведенный тобой код: 0B20:0100 EB03 jmp 105 и: 0B20:0105 A10201 mov ax,[102] Вижу что все тут токо для джампов и данных. А вот для самих маш.команд? Ткни пальцем П О Ж А Л У Й - С Т А чего я еще не вижу и где туплю, как сибирьс- кий валенок? Если ты посмотришь мои прошлые темы с этим вопросом, то ты увидишь там исходник виря: vandal.asm. Запустив его в работу, то там,где он восстанавливает исходные три байта, действительно проставлины смещения. Причем заражая другие файлы в том же месте теже самые смеще- ния. После кода файла зараженного, допустим он кончает- ся на смещении 303h, начинается код виря куда и прыгает в начале jmp и здесь код идет со смещения какого-нить 310h или 320h, а не с какого-нить 110h. Во что я еще не врубаюсь? |
|
|
Дата: Янв 3, 2004 00:06:39 · Поправил: Безпощадный даос EvilsInterrupt Дзэна феня, да сколько ж можно. Форум забит обращениями. К тому, к тому, к тому. Во всех задается один и тот же вопрос. Причем самому тебе смотреть что-то лень. И такое чувство что линкер поставляет смещения токо для данных, а для кода ни фига. Не туплю ли я? Разумеется, тупишь :) Ответь мне на вопрос: Смотрю на приведенный тобой код: 0B20:0100 EB03 jmp 105 КАКОЕ СМЕЩЕНИЕ КАСАТЕЛЬНО 0B20 будет у следующей, после jmp инструкции? И вообще, что такое "смещение"? Когда ты будешь сначала ЧИТАТЬ, а потом задавать вопросы? |
|
|
Дата: Янв 3, 2004 00:12:34 volodya рад что ты с нами и в добром расположении духа. :-) |
|
|
Дата: Янв 3, 2004 00:24:12 Всегда пожалуйста. Если надо - обращайся, еще насыплю. |
|
|
Дата: Янв 3, 2004 00:29:26 Как я понимаю система делает следующее: берет 1 команду исп.кода и заносит в cs:100h, допустим она весит 3 байта и следующая команда запишется 103h, 2 коман- да дупустим 2 байта, значит следующая запи- шется в 105h, это я думаю про инструкции процу, а не про данные, Прав ли я? С данными, если смотреть в отладчик, прос- тавляются смещения. Как разобраться во всех этих механизмах? Почитайте пожалуйста вопросы, чуть повни- мательней! Ну не могу же спать спокойно, по- ка не врублюсь. Вы можете конечно проигно- рировать меня, но черт побери, тогда я уто- ну, т.к. ни отладчик пока ответа не дает, да гугль чо-то ничего полезного не дает. Заранее благодарен. |
|
|
Дата: Янв 3, 2004 00:40:36 это я думаю про инструкции процу, а не про данные, Прав ли я? Да. С данными, если смотреть в отладчик, прос- тавляются смещения. Второй раз - да. Как разобраться во всех этих механизмах? Что опять не ясно? |
|
|
Дата: Янв 3, 2004 00:45:09 · Поправил: hGoblin Системе пофиг, данные она пишет, или код. Она берет не команды, а байты. И пишет, как вы и описали, начиная со 100h. Смещения проставляются ассемблером (системе все также пофиг). Как разобраться во всех этих механизмах? Почитайте пожалуйста вопросы, чуть повнимательней! Сначала прочитайте ответы. И книжки пишут не от нехватки туалетной бумаги. Забудьте на время гугль, жили же как-то первые программеры без инета? От такого количества инфы попа слипнется, если еще не слиплась. Вдумчиво почитайте 5, 15, 17, и все остальные номера рассылки. Там есть все что нужно и даже более того. Где написано "медитировать!" - медитируйте. volodya, что вы курили? |
|
|
Дата: Янв 4, 2004 01:41:08 Volodya, здравствуй. Да и ваще гоблин и остальные салям короче!!! Громадное спасибо заразбор путаницу в моей голове. Короче что я понял так это то, что ассемблер строит смещения. Но досе они по баробану при записи кода, т.к. она строит свои смещения. Они играют роль только при работе с данными, они записываются именно по тем смещениям, ко- торые им дал ассемблер с линкером. Это я уви- дел так: взял надоевший мне vandal.asm и заро- зил файл созданный с помощью Debug.exe он ве- сил 8 байт, после заражения он стал весить более 400 кило. Просмотрев место где вирь вос станавливает исходные три байта я и убедился по счет обращения к данным. Остается еще вопрос после прыжка на тело виря там, где идет push ds до этой команды могут идти несколько байт нулей, все это зависит от округления размера файла при заражении. Вопрос заключается в следующем вирь как планировался Ковалем начинается с начала параграфа, Где ин- фа для Доса, что надо это место начать с нача- ла параграфа? А до него послепоследнего байта файла заполнить нулями? Я понял, но хочу узнать правлильно ли я увиде В хексворкЖопе? Исходник приводил в теме: "Про способы адреса- ции". Заранее благдарен за ответ, ну и зато вы почитали вопрос. |
|
|
Дата: Янв 4, 2004 01:50:38 volodya, что вы курили? 1) Я не курю 2) Меня на "ты" 3) Что ты имеешь в виду? |
|
|
Дата: Янв 4, 2004 08:21:27 EvilsInterrupt Постараюсь добавить своё бредовое представление о том, что есть смещение и т.п. Ассемблер (любой) смотрит на исходный код в одной из первых строк имеется запись типа "org 100h" Это указывает ассемблеру, что программа будет загружаться системой начиная с адреса 100h, следовательно компилятор и преобразует все инструкции предполагая, что первая инструкция начнётся с адреса 100h. Хранить смещения каждой команды нет смысла т.к. код программы хранится на диске в том виде как указано в 4 посте этой ветки, но без адресов (находятся в левой части каждой строчки) и без мненонического обозначения (находятся в правой части каждой строчки) т.е. в файле записана лишь средняя часть из каждой строчки, а именно код комманд процессору. Причём процессор может интерпретировать один и тот же байт по разному в зависимости от текущей команды или как аргумент команды или как опкод команды. При чём теоретически можно все команды в исходном тексте программы задавать как определение данных: db 01,02,A1 ; mov ax,[102] db 01,03,06,03; add ax,[103] и т.д. |
|
|
Дата: Янв 4, 2004 23:02:47 Всем кто принимал участие в моем просвящении ГРОМАДНЫЙ THANK YOU. И ежели я б вас видел налил бы пива!!! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.049 |