Сейчас на форуме: tyns777, zds, JustLife, 2nd, morgot (+5 невидимых)

 eXeL@B —› Программирование —› Помогите разобраться в ASM Коде
Посл.ответ Сообщение


Ранг: 73.2 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 15 июня 2009 13:57
· Личное сообщение · #1

edx = 00000000
eax = 00E10000

Code:
  1. 006516A0: 
  2. push edx
  3. push eax
  4. add ax, word ptr ds:[esi]
  5. adc dx, word ptr ds:[esi+2]
  6. add esi, 4
  7. xlat byte ptr ds:[ebx+al]
  8. xchg ah, al
  9. add ebx, 100
  10. xlat byte ptr ds:[ebx+al]
  11. xchg dl, al
  12. add ebx, 100
  13. xlat byte ptr ds:[ebx+al]
  14. xchg dh, al
  15. add edx, 100
  16. xlat byte ptr ds:[ebx+al]
  17. sub ebx, 300
  18. shl ax, 1
  19. rcl dx, 1
  20. adc ax, 0
  21. shl ax, 1
  22. rcl dx, 1
  23. adc ax, 0
  24. shl ax, 1
  25. rcl dx, 1
  26. adc ax, 0
  27. xor dx, bp
  28. xor ax, di
  29. pop edi
  30. pop ebp
  31. loop short 006516A0


Это код исспользует таблицу символов кол-ва более 300 располагается в esi
хотелось бы получить аналог этого кода на Delphi исспользуя асм вставки.

но возникли некоторые трудности с операторами.
так же не могу понять:
xor dx, bp
xor ax, di
откуда берутся значения bp и di которые сохраняютя и потом участвую в дальнейшей расшифровке.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 15 июня 2009 14:55
· Личное сообщение · #2

на входе заданы eax и edx
в начале цикла они посылаются в стек:
Code:
  1. push edx
  2. push eax


в конце цикла эти значения получают edi и ebp
Code:
  1. pop edi
  2. pop ebp


т.о. в конце цикла edi = eax, ebp = edx


ShEriF пишет:
но возникли некоторые трудности с операторами.


какие конкретно трудности?


ShEriF пишет:
так же не могу понять:
xor dx, bp
xor ax, di
откуда берутся значения bp и di которые сохраняютя и потом участвую в дальнейшей расшифровке.


bp - это часть ebp, di - часть edi
как они получаются - см. выше

-----
EnJoy!




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 15 июня 2009 16:19 · Поправил: Модератор
· Личное сообщение · #3

Jupiter
Ты правильно сказал - в конце цикла. А вот начальные значения не присутствуют. То есть инициализации нет.

ShEriF пишет:
откуда берутся значения bp и di

Из представленного кода не понятно. Смотри выше или выложи мишень.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 15 июня 2009 17:14 · Поправил: Jupiter
· Личное сообщение · #4

progopis пишет:
А вот начальные значения не присутсвуют


кода маловато
помимо явной инициализации esi и ebp может быть прыг внутрь цикла

судя по коду, данные расположены по указателю esi
таблица - по адресу ebx

-----
EnJoy!





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 15 июня 2009 19:53
· Личное сообщение · #5

CodeRipper дла олги рипнет как надо, останется лишь забить начальные значения, ну и на всяк огородить алгоритм pushad/popad

-----
[nice coder and reverser]





Ранг: 73.2 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 16 июня 2009 05:20 · Поправил: ShEriF
· Личное сообщение · #6

я уже не помню какие трудности были, но вроде бы Delphi 7 ругася на 2 подрят XOR
Code:
  1. xor dx, bp
  2. xor ax, di

и вот на эту конструкцию
Code:
  1. add ax, word ptr ds:[esi]

во 2й я походу просто не правильно описал тип переменой.

Jupiter пишет:
судя по коду, данные расположены по указателю esi
таблица - по адресу ebx

действительно мой косяк.
в ESI находится ссылка на блок констант, а таблица символов в EBX эти таблицы достаточно большие и выкладывать их сюда думаю нет смысла.

Всем спасибо, в принципе получил ответ, пойду копать дальше.


 eXeL@B —› Программирование —› Помогите разобраться в ASM Коде
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати