|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 3, 2004 12:14:14 Приветствую господа! Собственно говоря вот какой вопрос. Есть программа, у которой по некоторому смещению есть некая процедура. Задача, пропатчить нужное количество байт после этого смещения. Вот что я написал: .globl _start _start: # Открываю файл который хочу пропатчить. xor %eax,%eax push %eax pushl $0x6b637566 # Имя файла. movl %esp,%ebx pushw $0x0002 # Открываю файл на чтение и запись. pushl %ebx pushl $5 push %eax int $0x80 #Ищу нужное смещение. movl %eax,%ebx xor %eax,%eax pushw $0x0530 # Адрес смещения. mov %esp,%ecx push $199 # syscall lseek push %eax int $0x80 #записываю в файл. xor %eax,%eax push $4 push %eax movl $sc,%ecx # Что буду записывать. movl $28,%edx # Сколько байт буду записывать. int $0x80 # Закрываем файл. xor %eax,%eax push $6 push %eax int $0x80 # Выходим. xor %eax,%eax push $1 push %eax int $0x80 # Что я непосредственно хочу записать в файл. sc: .asciz "\x99\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f" .asciz "\x62\x69\x89\xe3\x51\x52\x53\x53\x6a\x3b" .asciz "\x58\xcd\x80\x90\x90\x90\x90\x90" Вчера часа 4 сидел, так и не смог разобраться в чем я просчитался :( Мыслей вообще никаких нет. Ведь вроде как все правильно делаю. Господа, есть какие-нить мысли по этому вопрос? p.s. Сильео не пинайте, я asm вторую неделю только изучаю :) Еще многих тонкостей не знаю. Заранее спасибо за ответы. |
|
|
Дата: Июн 3, 2004 12:49:29 Что-то я в упор не вижу чтобы функциям работы с файлом передавался какой нибудь хендл. Или он в ebx? Кроме того вызывает некоторые сомнения команда pushw, логичнее если бы там было pushl. А вообще кинь ссылку на описание int 80h, а то без него разбираться сложно 8) |
|
|
Дата: Июн 3, 2004 13:18:26 После открытия имя файла остается в %ebx, оттуда я его и беру. По поводу ссылки. Тебе нужны списки системных вызовов FreeBSD? Если да то вот - ftp.ioffe.rssi.ru/pub/FreeBSD/FreeBSD-current/src/sys/sys/syscall.h Заранее спасибо за ответ. |
|
|
Дата: Июн 3, 2004 19:49:35 А что, сишную программу написать сложно? Это ж тебе не .so падчить, все просто. |
|
|
Дата: Июн 3, 2004 21:02:56 Ну так на сях это понятно, написать не проблема. Интересно написать все это дело на asm :) |
|
|
Дата: Июн 3, 2004 21:29:22 Ну, ОК. Напиши на С. Попроси gcc выдать ассемблерный листинг и погляди чего к чему. gcc -c -g -Wa,-a,-ad your_file.c > your_file.lst Это я уже с .so/GOT/PLT/reloc потихоньку с ума схожу :( |
|
|
Дата: Июн 4, 2004 01:13:25 Или в lcc галочку поставить чтоб генерил asm файл ;-) |
|
|
Дата: Июн 4, 2004 13:10:38 Самый прикол в том что я С/C++ вообще не знаю :) Я-ж по сути не программер, а обчный unix админ. А программирование начал для разнообразия изучать. Да и жутко интересно это. А в качесте языка для изучения выбрал asm как самый _правильный_ язык. Ну а так как я админю *BSD, решил и asm для BSD изучать. А эту задачу с патчингом ELF`а я сам себе выдумал. Ведь правильно один умный дядька сказал - "Лучший способ изучить язык программирования это начать писать на нем программы". Воть я потихонку и пытаюсь написать разные простые вещи. Заранее спасибо за дальнейшие ответы по этой теме :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.060 |