Здраствуйте. Программа получает параметры из коммандной строки. Отделяю параметры поиском пробела (20Н). Почему там оказывается два пробела. В первой программе из-за этого возникала ощибка, долго не мог понять где она. Пишем: program.exe test.txt В памяти: program.exe test.txt OllyDbg показывает один пробел. Ошибку удалось выявить используя TD32.exe из поставки BTASM5. Он правильно отобразил 2 пробела в дампе памяти. Для написания программы использую masm32. OS Vista
allex7 Там может оказаться и 10 пробелов подряд (у набиравшего рука дрогнула), поэтому используя связку из lodsb/stosb исключаешь из командной строки все "лишние" пробелы, а заодно приводишь имена команд, файлов и другие аргументы командной строки к верхнему или нижнему регистру -- реальная жизнь сложнее, чем вам преподают в университете...
Я 5 лет назад университет закончил. Повторяю - пишем с одним пробелом, в памяти два: Поэтому для указанных команд после: cmp al, 20h необходимо esi увеличить на еденицу: inc esi только тогда получаем адрес параметра командной строки. Вопрос - почему?
нет программа берет большой текстовой файл и режет на маленькие. Имя файла из командной строки. В OllyDbg при задании параметров программа работает правильно. Но при запуске в коммандной строке параметры искажаются. После добавления inc esi получаем правильный адрес. Ошибка проявилась еще в маленькой программе Sleep, которая используя одноименную АПИ получала время из коммандной строки. Логически, при найденном 20Н, в esi адрес параметра. Однака программа не делала паузы на нужное время, пока после найденного 20Н не поставил inc esi.
allex7 Пробел мог появиться по всяким причинам. Логически говоря, программа не должна полагать, что пробел там только один. Кроме того, коммандная строка может иметь элементы заключённые в двойные кавычки. Например: "C:\Program Files" - там есть пробел, но он не является разделителем параметров, а он просто часть ОДНОГО параметра.