Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2012, 16:42   #1
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию Добавить запуск через параметр

Я открыл программу через ollydbg, скрин прилогаю. Я хочу создать новую точку входа, но кроме этого я хочу сделать что б приложения можно было запустить только с помощю дополнительного параметра.
Например "myprogram.exe start" а все остальные параметры, включая обычный запуск не запускали её. Стандартная её точка входа 08345200
Мне подсказали вот такой код
Код:
push  edi
call  [GetCommandLineA]
mov   eax,edi
mov   ecx,-1
xor   eax,eax
repne scasb   
pop   edi
cmp   dword[edi-6],'star'
jne   08345246h
cmp   word[edi-2],'t"'
jne   08345246h
Когда ассемблирую Код ASM
Код:
cmp dword[edi-6],'star'
то пишет Unterminated character constant. Помогите пожалуйста.
Изображения
Тип файла: jpg Безимени-2.jpg (301.1 Кб, 116 просмотров)

Последний раз редактировалось Dzib; 06.09.2012 в 16:45.
Dzib вне форума Ответить с цитированием
Старый 07.09.2012, 00:58   #2
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию

Потом мне посоветововали вот так сделать.
Код:
call  [GetCommandLineA]      ;Получаем указатель на командную строку в регистр eax
mov   edi,eax                
mov   ecx,-1
xor   eax,eax
repne scasb                  ;ищем конец строки (регистр edi после выполнения будет указывать на завершающий ноль)  
cmp   dword[edi-6],72617473h 
jne   8345246h
cmp   word[edi-2],2277h
jne   8345246h               ;Если последние 6 символов не равны 'start"', переходим на адрес 8345246h - там происходит вызов ExitProcess
jmp   8345200h               ;Иначе переходим на адрес 8345200h - начало программы
Но пришлось пробовать на другом приложении, потому с этим были проблемы когда дошло до сохранения.
Вобшем взял новое приложения, написал все что мне посоветовали, плюс там небыло поблизу вызова ExitProcess, я нашел по адресу 006C188F. Но после сохранения, если открыть дебагером оно все такое не красивое становится. (Безимени-7.jpg скрин) После того как переношу точку входа на 00888FB8 ошыбка.
Если некто не хочет вникать в мою проблему, посоветуйте пожалуйста литературу в которой об этом написано, но не о асамблере в общем, а где показывают похожие примеры на мою задачку.
Изображения
Тип файла: jpg Безимени-7.jpg (115.0 Кб, 135 просмотров)
Тип файла: jpg Безимени-8.jpg (64.9 Кб, 103 просмотров)
Dzib вне форума Ответить с цитированием
Старый 08.09.2012, 19:31   #3
Dzib
Пользователь
 
Регистрация: 24.10.2008
Сообщений: 21
По умолчанию

Рабочый вариант
Код:
CALL dword[GetCommandLineA]
LEA EDI,DWORD PTR DS:[EAX+1]
MOV ECX,-1
MOV AL,22
REPNE SCAS BYTE PTR ES:[EDI]
CMP DWORD PTR DS:[EDI+1],72617473
JNZ 006C188F ;точка выхода
CMP WORD PTR DS:[EDI+5],74
JNZ 006C188F ; точка выхода
JMP 00854EBC ; продолжения выполнения программы
Dzib вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск программы через .exe EddieG Общие вопросы по Java, Java SE, Kotlin 2 04.03.2012 02:26
Поиск компонента через параметр Name b2soft Помощь студентам 5 01.01.2011 22:38
Запуск программы через файл. Nater Общие вопросы Delphi 3 25.07.2010 18:46
Добавить запись в БД через MIDAS ??? EugeneIsmatulin БД в Delphi 3 16.09.2009 16:19
Запуск запроса из БД Access через С# AnnNet Общие вопросы .NET 1 20.05.2009 16:31