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

Два label'a


ShadowStormOne

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

Подскажите пожалуйста, столкнулся с проблемой что объявил 2 label'a один нормально отрабатывает второй просто исчезает, при этом нечего не крашит и не падает. 

Ниже скрипт
 

Спойлер
[ENABLE]

aobscan(BASEADDR,F3 0F 11 AF 30 02 00 00 48) // should be unique
alloc(newmem,$1000,BASEADDR)

label(code)
label(return)
label(base_addr)
label(base_addres)

newmem:
push rbx
mov rbx,[rdi+100]
mov [base_addres],rdi
mov [base_addr],rbx
pop rbx

code:
  movss [rdi+00000230],xmm5
  jmp return

base_addres:
  db 00

base_addr:
  db 00


BASEADDR:
  jmp newmem
  nop 3
return:
registersymbol(BASEADDR)
registersymbol(base_addr)
registersymbol(base_addres)

[DISABLE]

BASEADDR:
  db F3 0F 11 AF 30 02 00 00

unregistersymbol(BASEADDR)
unregistersymbol(base_addr)
unregistersymbol(base_addres)
dealloc(newmem)

 

 

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

1 час назад, ShadowStormOne сказал:

столкнулся с проблемой

адреса 8 байт?
Попробуй так

Спойлер
[ENABLE]

aobscan(BASEADDR,F3 0F 11 AF 30 02 00 00 48) // should be unique
alloc(newmem,$1000,BASEADDR)

label(code)
label(return)
label(base_addr)
label(base_addres)

newmem:
push rbx
mov rbx,[rdi+100]
mov qword ptr [base_addres],rdi
mov qword ptr [base_addr],rbx
pop rbx

code:
  movss [rdi+00000230],xmm5
  jmp return

base_addres:
  dq (double)0

base_addr:
  dq (double)0


BASEADDR:
  jmp newmem
  nop 3
return:
registersymbol(BASEADDR)
registersymbol(base_addr)
registersymbol(base_addres)

[DISABLE]

BASEADDR:
  db F3 0F 11 AF 30 02 00 00

unregistersymbol(BASEADDR)
unregistersymbol(base_addr)
unregistersymbol(base_addres)
dealloc(newmem)

 

 

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

30 минут назад, ShadowStormOne сказал:

Спасибо, с dq работает. Есть ссылка на документацию по db dq и тд?

db - 1 байт

dw - 2 байта - 1 слово

dd - 4 байта - 2 слова

dq - 8 байт - 4 слова

dt - 10 байт

Вы пытаетесь регистр 64 битной игры запихнуть в 1 байт.

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

2 часа назад, ShadowStormOne сказал:

второй просто исчезает

у тебя исчезает не второй, а именно первый.
если бы ты воспользовался пошаговой отладкой (или хотя бы посмотрел в регионе памяти как это все выглядит)то ты понял бы.
допустим
rdi = 11 11 11 11 11 11 11 11, а
rbx = 22 22 22 22 22 22 22 22.
тогда, после срабатывания первой инструкции 
mov [base_addres],rdi
у тебя в регионе памяти запишется правильный адрес
11 11 11 11 11 11 11 11, но после, срабатывания второй инструкции 
mov [base_addr],rbx
у тебя в регионе памяти будет так
11 22 22 22 22 22 22 22 22
т.е. второй адрес будет правильным, а первый ты повредишь.

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

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

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

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