DaVilka Опубликовано 22 декабря, 2017 Поделиться Опубликовано 22 декабря, 2017 По адресу 6BB6DFA0 находится буфер, в который пишутся байты в зависимости от их размера. Я ставлю бряк на запись по этому адресу и получаю вот это Скрытый текст С асм я знаком только в общих чертах, по этому не могу понять что здесь происходит? Байты идут по адресу 6BB6DFA0++ то есть 6BB6DFA1->6BB6DFA2->6BB6DFA3 ... Первый байт - ид пакета, дальше тело. На скрине записывается пакет в 18 байт. Но не понятна инструкция, получается, ecx = 01234567(на пример) и, с каждым байтом ecx увеличивается на пару байт, и прибавляется статический адрес 6BB6DFA0? Но почему тогда вызывается всего 5 раз, если пакет 18 байт, то и вызывается должно же 18 раз? Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 22 декабря, 2017 Поделиться Опубликовано 22 декабря, 2017 (изменено) судя по скрину больше похоже, что 17 байт. EAX хранит 4 байта, al 1 байт 4*4+1 = 17 ECX в роли итера, полагаю что-то вроде add ecx,4 Изменено 22 декабря, 2017 пользователем Dino Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 23 декабря, 2017 Поделиться Опубликовано 23 декабря, 2017 48 минут назад, DaVilka сказал: Но не понятна инструкция, получается, ecx = 01234567(на пример) и, с каждым байтом ecx увеличивается на пару байт, и прибавляется статический адрес 6BB6DFA0? перемещение по буферу для считывания байт. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 23 декабря, 2017 Поделиться Опубликовано 23 декабря, 2017 4 часа назад, DaVilka сказал: Я ставлю бряк на запись по этому адресу и получаю вот это По-видимому дизассемблер перевел твой ехе так. 4 часа назад, DaVilka сказал: Первый байт - ид пакета Пока у тебя ID равно 1 байту, то: mov [ecx+6BB6DFA0],al // регистр al - один байт как только ID станет равным 2 байтам, то: mov [ecx+6BB6DFA0],ax // уже будет регистр ax - два байта и так до регистра eax - 4 байта. 4 часа назад, DaVilka сказал: если пакет 18 байт, то и вызывается должно же 18 раз? Для того, чтобы было 18 раз обращение, нужно было написать так свою прогу, т.е. записывать по байтно. Ссылка на комментарий Поделиться на другие сайты Поделиться
DaVilka Опубликовано 23 декабря, 2017 Автор Поделиться Опубликовано 23 декабря, 2017 (изменено) 7 часов назад, Garik66 сказал: Пока у тебя ID равно 1 байту, то: 11 час назад, Dino сказал: судя по скрину больше похоже, что 17 байт. EAX хранит 4 байта, al 1 байт 4*4+1 = 17 ECX в роли итера, полагаю что-то вроде add ecx,4 ID всегда равен 1 байт, он пишется из al по адресу 6BB6DFA0, ecx == 00000000 Дальше идет тело, dword( 4 байта) -> dword -> dword -> dword -> char(1байт всегда равен 00 хз почему его не записало Во второй инстукции, где пишется eax, ecx == 00000001 7 часов назад, Garik66 сказал: Для того, чтобы было 18 раз обращение, нужно было написать так свою прогу, т.е. записывать по байтно. Собственно а как щас пишет, 4 байта eax? Изменено 23 декабря, 2017 пользователем DaVilka Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 23 декабря, 2017 Поделиться Опубликовано 23 декабря, 2017 45 минут назад, DaVilka сказал: ID всегда равен 1 байт, он пишется из al по адресу 6BB6DFA0, ecx == 00000000 Дальше идет тело, dword( 4 байта) -> dword -> dword -> dword -> char(1байт всегда равен 00 хз почему его не записало Во второй инстукции, где пишется eax, ecx == 00000001 Собственно а как щас пишет, 4 байта eax? и что?? Я во втором посте объяснил почему так происходит, и даже почему 17, а не 18 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения