Сейчас на форуме: (+6 невидимых)

 eXeL@B —› Вопросы новичков —› [ASM] Что выполняется приведенным кодом?
Посл.ответ Сообщение

Ранг: 3.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 августа 2010 21:33 · Поправил: requte
· Личное сообщение · #1

Привожу дизасм листинг двух функций, которые хотелось бы понять. Прошу помощи в силу слабого знания asm. Можно даже построчно, заранее благодарен.

Чтобы меня не закидали камнями и сразу не перекинули в раздел для нубов, уточню, каждая из этих функций является единственной функцией внутри библиотеки (их тоже две), они экспортированы и имеют прототип int funcname(int, int); вызываются неким лаунчером. По идее, они имею какой-то отношение к последующему взаимодействию с неким драйвером [somedriver.sys], который лежит рядом с лаунчером. Больше в библиотеках ничего нет (на всякий случай, взять их можно --> здесь <--)

func1
Code:
  1. push ebp
  2. mov ebp,esp
  3. push ebx
  4. mov ax,8000h
  5. or al,00h
  6. shl eax,10h
  7. mov ax,0002h
  8. shl ax,0Bh
  9. mov al,00h
  10. or ah,al
  11. mov al,[ebp+08h]
  12. mov dx,0CF8h
  13. out dx,eax
  14. mov dx,0CFCh
  15. in eax,dx
  16. mov eax,[ebp+0Ch]
  17. out dx,eax
  18. pop ebx
  19. leave
  20. retn 0008h


func2
Code:
  1. push ebp
  2. mov ebp,esp
  3. push ebx
  4. mov ax,8000h
  5. or al,00h
  6. shl eax,10h
  7. mov ax,0002h
  8. shl ax,0Bh
  9. mov al,00h
  10. or ah,al
  11. mov al,[ebp+08h]
  12. mov dx,0CF8h
  13. out dx,eax
  14. mov dx,0CFCh
  15. in eax,dx
  16. mov ebx,eax
  17. pop ebx
  18. leave
  19. retn 0008h





Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 03 августа 2010 21:52
· Личное сообщение · #2

Если я не ошибаюсь...

requte пишет:
in eax,dx
out dx,eax


1.Ввод в аккумулятор (еах) из порта ввода/вывода
2.Вывод в порт.

-----
aLL rIGHTS rEVERSED!




Ранг: 3.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 августа 2010 22:01
· Личное сообщение · #3

In the x86 world, the index port always located at 0CF8h and the data port is always located at 0CFCh in I/O space. Разумно.

OnLyOnE, можно чуть подробнее о том что происходит?




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 03 августа 2010 22:35 · Поправил: Coderess
· Личное сообщение · #4

Подробно
256bit.ru/Assembler/Pr/Index20.htm

OUT Вывод в порт


Команда out выводит в порт, указываемый первым операндом, байт или слово соответственно из регистра AL или АХ. Адрес порта помещается в регистр DX. Если адрес порта не превышает 255, он может быть указан непосредственным значением. Указание регистра-источника (AL или АХ) обязательно, хотя с другими регистрами команда out не работает, и их указывать нельзя. Команда не воздействует на флаги процессора.

Пример 1


mov AL,20h ;Команда конца прерывания (EOI)
out 20h,AL ;Вывод команды EOI в порт
;20h контроллера прерываний

Пример 2


mov DX,3CEh ; Адрес порта
mov AL,5 ;Данное
out DX,AL ;Вывод байта из AL в порт 3CEh

Допустимо использование в качестве операнда-источника расширенного регистра ЕАХ (если адресуемое устройство позволяет записать в его порт двойное слово).

Пример


mov ЕАХ,1А008РРЗh;Пересылаемое данное
mov DX,345h ;Адрес порта
out DX,EAX ;Вывод в порт двойного слова


-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 3.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 августа 2010 22:48
· Личное сообщение · #5

Забудем временно про func2, с ней разберусь без проблем, поняв работу func1.

Как я понял после небольшого погружения, получается следующее...
Code:
  1. push ebp
  2. mov ebp,esp
  3. push ebx
  4. mov ax,8000h       
  5. or al,00h          ; bus
  6. shl eax,10h
  7. mov ax,0002h       ; device
  8. shl ax,0Bh
  9. mov al,00h         ; function
  10. or ah,al
  11. mov al,[ebp+08h]   ; vendor берем из первого(?) параметра функции
  12. mov dx,0CF8h
  13. out dx,eax         ; делаем наш запрос (b/d/f/v)
  14. mov dx,0CFCh
  15. in eax,dx          ; получаем ответ? (dword, ложится в eax) что с ним делаем дальше?
  16. mov eax,[ebp+0Ch]  ; вот тут запутался, понимаю, что это второй параметр функи
  17. out dx,eax         ; вывод в порт (что выводится туда в итоге?)
  18. pop ebx
  19. leave
  20. retn 0008h   ; всегда возвращается 8h???




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 03 августа 2010 22:59
· Личное сообщение · #6

PCI CFG.



Ранг: 3.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 августа 2010 02:33
· Личное сообщение · #7

Clerk, спасибо, все вкурил.

Закрываю.


 eXeL@B —› Вопросы новичков —› [ASM] Что выполняется приведенным кодом?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати