|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 6, 2003 00:36:02 · Поправил: KiNDeR Asterix Я не отлаживал, нечем, я на работе, но попробывал с разными параметрами и вроде багов нема. Скачал Olly, протрассировал, все нормуль...Работает... |
|
|
Дата: Авг 6, 2003 00:38:15 Asterix Твой пример не работает если в командной строке нет параметров Если параметров нет, MessageBox не появляется. Это не баг а фича. А что будет если командная строка имеет следующий вид: "C:\path\my program" Как отличить, что "my program" -- это имя экзешника а не имя "my" и параметр "program". Видимо поэтому параметры принято начинать со спец. символа, вроде '/'. |
|
|
Дата: Авг 6, 2003 01:04:08 KiNDeR я там в предыдущем посте добавил... [ Quantum А что будет если командная строка имеет следующий вид: "C:\path\my program" Как отличить, что "my program" -- это имя экзешника а не имя "my" и параметр "program". Видимо поэтому параметры принято начинать со спец. символа, вроде '/'.] Это ты к чему?, поэтому и добавлено '/' к имени параметра, а вот если спец. символ будет '-', то имея в пути ' -' мой третий пример в пролёте... Я же говорил приведи весь код программы, может я не правильно интерпретировал твою мысль, но у меня если в командной строке нет управляющих параметров то esi указывает на byte 00h, а вот куда оно указывает у KiNDeR... может в этом кроется баг в приходе(иногда) строки с кракозябликами... |
|
|
Дата: Авг 6, 2003 01:09:47 · Поправил: KiNDeR Asterix но у меня если в командной строке нет управляющих параметров то esi указывает на byte 00h, а вот куда оно указывает у KiNDeR... может в этом кроется баг в приходе(иногда) строки с кракозябликами... У меня всегда указывает на mParam, если есть управляющий параметр, то выводим его, иначе выводим стрку состоящую из 260 byte 00h(т.е ничего...). |
|
|
Дата: Авг 6, 2003 01:30:23 KiNDeR Я попробовал запускать скомпилённый по твоему исходнику exe'шник несколько раз под Olly, больше этой ситуации не возникало, так что можно списать на глюк в Винде... Но твой код по принципу схож с моим третьим примером, поэтому возникает вопрос: чей код признать более правильным???, т.к. Quantum молчит..., а его пример я так и не понял... :-) |
|
|
Дата: Авг 6, 2003 01:38:06 Asterix А ты мой код по ХР пробывал? Работает? В нашы коды надо добавить еще анализ "-" и пробелов в ситуации когда "/какое-то_слово пробел слово", что бы обрабатывалось только первое слово... |
|
|
Дата: Авг 6, 2003 01:48:23 Asterix т.к. Quantum молчит Временно отлучился... Прошу не дисквалифицировать из компо! Я же говорил приведи весь код программы Там действительно был баг. Вот исправленный вариант: .386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc includelib kernel32.lib include user32.inc includelib user32.lib .CODE start: invoke GetCommandLine push eax invoke lstrlen,eax pop edi test eax,eax jz _badpath add edi,eax xchg eax,ecx mov al,' ' std repnz scasb cld jnz _badpath add edi,2 xor eax,eax invoke MessageBox,eax,edi,eax,eax _badpath: invoke ExitProcess,0 end start ЗЫ: GetModuleFileName не возвращает параметры, а жаль. |
|
|
Дата: Авг 6, 2003 01:57:06 Quantum А как же это? Да, еще..., и если этого blabla нет, т.е. нет ничего в управляющих параметрах, то messagebox должен быть пустым... :) |
|
|
Дата: Авг 6, 2003 01:57:30 · Поправил: Asterix И чтобы меня не упрекали в использовании лишней API, в связи с этим представляю Пример №4 ---------------------------------------------------------------------- 4) .386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
cmdline dd 0
.code
start:
invoke GetCommandLine
mov cmdline, eax
mov esi,eax
metka:
.if byte ptr [esi]!=00h
.if byte ptr [esi]!=' '
inc esi
jmp metka
.endif
inc esi
.if byte ptr [esi]!='/'
jmp metka
.endif
inc esi
.endif
invoke MessageBox, NULL,esi, 0, MB_OK
invoke ExitProcess,NULL
end start |
|
|
Дата: Авг 6, 2003 02:04:04 · Поправил: Asterix [ KiNDeR: "-" и пробелов в ситуации когда "/какое-то_слово пробел слово", что бы обрабатывалось только первое слово...] Управляющий символ '-' для меня не критичен, потому что иначе код намного усложнится, вполне обойдусь символом '/'. "/какое-то_слово пробел слово" Это обрабатывать не нужно, у меня за управляющий параметр берётся всё что будет после комбинации ' /', т.е. после пробела и спец. символа. Я не собираюсь обрабатывать глюки user'а, который с пьяну, видимо, после управляющего символа добавит крепкое словцо, ну чтоб прога круче его понимала ;-) |
|
|
Дата: Авг 6, 2003 02:05:23 Asterix Было бы предложено...:) |
|
|
Дата: Авг 6, 2003 02:09:00 · Поправил: Asterix Теперь я займусь разбором того что накодил Quantum :-) |
|
|
Дата: Авг 6, 2003 02:10:57 KiNDeR А как же это? Тады так: start:
invoke GetCommandLine
push eax
invoke lstrlen,eax
pop edi
test eax,eax
jz _er
add edi,eax
mov esi,edi
xchg eax,ecx
mov al,' '
std
repnz scasb
cld
push MB_OK
push OFFSET msgTitle
jz @@1
push esi
jmp @@2
@@1: add edi,2
push edi
@@2: push 0
call MessageBox
_er: invoke ExitProcess,0
end start |
|
|
Дата: Авг 6, 2003 02:12:28 Quantum Все нармуль :-)... |
|
|
Дата: Авг 6, 2003 02:13:49 А нет ни у кого примерчика под fasm? А то ему всякие такие штуки .if byte ptr [esi]!='/' не нравются :( |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.061 |