Перейти к содержанию

Не понятная запись по адресу


DaVilka

Рекомендуемые сообщения

По адресу 6BB6DFA0 находится буфер, в который пишутся байты в зависимости от их размера.

Я ставлю бряк на запись по этому адресу и получаю вот это

Скрытый текст

image.png

С асм я знаком только в общих чертах, по этому не могу понять что здесь происходит? :D

Байты идут по адресу 6BB6DFA0++ то есть 6BB6DFA1->6BB6DFA2->6BB6DFA3 ...

Первый байт - ид пакета, дальше тело. На скрине записывается пакет в 18 байт.

Но не понятна инструкция, получается, ecx = 01234567(на пример) и, с каждым байтом ecx увеличивается на пару байт, и прибавляется статический адрес 6BB6DFA0?

Но почему тогда вызывается всего 5 раз, если пакет 18 байт, то и вызывается должно же 18 раз? 

Ссылка на комментарий
Поделиться на другие сайты

судя по скрину больше похоже, что 17 байт. 

EAX хранит 4 байта, al 1 байт

4*4+1 = 17

 

ECX в роли итера, полагаю что-то вроде add ecx,4

 

Изменено пользователем Dino
Ссылка на комментарий
Поделиться на другие сайты

48 минут назад, DaVilka сказал:

Но не понятна инструкция, получается, ecx = 01234567(на пример) и, с каждым байтом ecx увеличивается на пару байт, и прибавляется статический адрес 6BB6DFA0?

 

перемещение по буферу для считывания байт.

Ссылка на комментарий
Поделиться на другие сайты

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 раз обращение, нужно было написать так свою прогу, т.е. записывать по байтно.

Ссылка на комментарий
Поделиться на другие сайты

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?

 

 

 

 

Изменено пользователем DaVilka
Ссылка на комментарий
Поделиться на другие сайты

45 минут назад, DaVilka сказал:

 

ID всегда равен 1 байт, он пишется из al по адресу 6BB6DFA0, ecx == 00000000

Дальше идет тело, dword( 4 байта) -> dword -> dword -> dword -> char(1байт всегда равен 00 хз почему его не записало

Во второй инстукции, где пишется eax, ecx == 00000001

Собственно а как щас пишет, 4 байта eax?

 

 

 

 

и что?? Я во втором посте объяснил почему так происходит, и даже почему 17, а не 18

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.