Сейчас на форуме: jinoweb (+6 невидимых) |
eXeL@B —› Программирование —› Увеличение диапазона читаемых чисел |
Посл.ответ | Сообщение |
|
Создано: 02 января 2016 03:23 · Личное сообщение · #1 Здравствуйте. Помогите разобраться. Есть функция, читающая в отдельном файле коды вида s0-s15, t0-t15, u0-u15, v0-v15, w0-w15, x0-x15, y0-y15 и преобразующая их в числовые значения от 0 до 63 (0-3F). Само преобразование происходит начиная с адреса 004D9FAC, и там вроде бы все нормально. Но дальше идет чтение собственно числовых значений (004DA201) и тут уже стоит ограничение 0-3F. Каким образом мне расширить диапазон до 6F, чтобы коды w0-w15, x0-x15 и y0-y15 могли использоваться программой? Вроде-бы все перед глазами и должно быть легко и просто, но моих поверхностных гугл-знаний ассемблера нехватает. Пробовал добавить Case 9 в конце функции. Джампы все правильно прописал, обновил без ошибок. Но в результате этих экспериментов появлялись/исчезали только числа 8-9. Кстати, непонятно - почему Cases 0, 3, 8, 9, A, B, C, D, E, F..... в начале не показывает 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ведь фактически все эти числа читаются. AND EDX,0000003F тоже пробовал менять на, например, 4F (для w0-w15). В этом случае код портился окончательно. Извините за, скорее всего, глупый вопрос, но его решение мне сняло бы с шеи пару камней. f00b_02.01.2016_EXELAB.rU.tgz - Cases.txt |
|
Создано: 02 января 2016 08:41 · Поправил: BfoX · Личное сообщение · #2 Switch (cases 0..3F, 8 exits) их всего 3F, а но не больше 7 (CMP ECX,7) вот эти Cases 1,2,4,5,6,7,8 а эти Cases 0, 3, 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, 1D, 1E, 1F, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 2C, 2D, 2E, 2F, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3A, 3B, 3C, 3D, 3E, 3F дефолтные ----- ...или ты работаешь хорошо, или ты работаешь много... |
|
Создано: 02 января 2016 11:49 · Поправил: dosprog · Личное сообщение · #3 Code:
Внимательно см.сюда: 004D9FBF |. 0FB690 C4A24D MOVZX EDX,BYTE PTR DS:[EAX+4DA2C4] ;<-- ПО АДРЕСУ 4DA2C4 ТАБЛИЦА (19h BYTES) ИНДЕКСОВ для каждой из букв 'a'..'z' Нужно подредактировать эту таблицу для каждой из дополнительно желаемых буковок. В общем, нужно пробовать |
|
Создано: 02 января 2016 16:53 · Поправил: gabryelle · Личное сообщение · #4 Вот эта таблица Code:
Букв 11, а индексов 26. Даже не вижу, как они могут быть связаны. В таблице переходов все указано верно Code:
Буква z используется, но там немного другой рассчет и она мне не нужна. Нужны именно w,x,y. |
|
Создано: 02 января 2016 16:56 · Поправил: dosprog · Личное сообщение · #5 gabryelle пишет: Букв 11, Букв 19h+1 = 25+1, вместе с нулевым - 26 (1Ah). Столько же байтов и в таблице типов-индексов. (004DA2DEh - 004DA2С4h = 1Ah = 26) А 11 (0Ah+1) - это обработчиков различных типов символов. Этих типов да, 11 (00..0Ah). Code:
|
|
Создано: 02 января 2016 17:11 · Поправил: gabryelle · Личное сообщение · #6 |
|
Создано: 02 января 2016 17:16 · Поправил: dosprog · Личное сообщение · #7 |
|
Создано: 02 января 2016 17:26 · Личное сообщение · #8 dosprog дело в том, что с разбором все понятно, проблема начинается ниже, именно в месте BfoX пишет: Cases 0, 3, 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, 1D, 1E, 1F, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 2A, 2B, 2C, 2D, 2E, 2F, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3A, 3B, 3C, 3D, 3E, 3F дефолтные Хотя буква 'w' рассчитывается как нужно (w0=40h), число 40h и выше уже не читается. Если вам не трудно посмотреть, могу кинуть сам файл. Или в лс договоримся. Добавлено спустя 3 часа 52 минуты Мне кажется загвоздка в AND EDX,0000003F - если я правильно понимаю, выделяются первые 6 битов из EDX, в то время, как 40h - это уже 7 битов. В результате 40h (0100 0000) обрезается до 0h. |
|
Создано: 02 января 2016 22:08 · Личное сообщение · #9 |
|
Создано: 02 января 2016 22:22 · Личное сообщение · #10 Code:
Пробовал менять здесь - не работает. Получается Code:
а тут вообще пусто Code:
Выше по коду тоже много таких значений, но их замена никак не влияет |
|
Создано: 03 января 2016 11:22 · Личное сообщение · #11 |
|
Создано: 03 января 2016 14:02 · Поправил: dosprog · Личное сообщение · #12 BfoX пишет: тогда будет вылетать за диапазон cases Да, это не выход. Что-то в таком формате обсуждение может длиться годами, и всё бестолку. Я вот так и не понял, к каким последствиям привело редактирование вот этих байтов? : Code:
|
|
Создано: 03 января 2016 19:09 · Личное сообщение · #13 |
|
Создано: 06 января 2016 18:01 · Личное сообщение · #14 |
eXeL@B —› Программирование —› Увеличение диапазона читаемых чисел |