Изменения

Перейти к: навигация, поиск

Участник:GeraltFromRivia/Лекция асм 03

2460 байт добавлено, 15:25, 28 июня 2012
Новая страница: « global _start ;метки бывают локальные и глобальные, они могут пересечься(лок временный функ...»
global _start ;метки бывают локальные и глобальные, они могут пересечься(лок временный функции, видны из этого файла, но не снаружи)
section .text ;секция кода,которая будет выполняться....есть еще секции .data(не для выполнения)
_start:

рассмотрим различные конвекции вызова:
pascal
cdecl
stdcall
fastcall
thiscall
-надо будет почитать про них.....

; .rdata(.rodata) секции только для чтения(не выводить, не выполнять)
; .bss невыводимые данные из нулей не храняшиеся в exe-шнике(такое сокращение)

; ExitProcess функция
| name
| mangling
если нужно....то пишется call _ExitProcess@q , где q - какое-то десятичное число
еще может добавиться префикс импортируемый __imp_ , после чего получится такая переменная
типа указатель на функцию call [__imp__ExitProcess@4] , это нужно для линкера
например команду типа
|_ExitProcess@4
|jmp [__imp_ ...]

Функция MessageBox создает, отображает на экране и оперирует окном сообщений - это define, у него может быть два разных аргумента - или А или W...

давайте напишем на асемблере такую си-шную функцию:
|int sub (int a, int b)
|{
| return a-b;
|}
это быдет выглядеть так:
|...
|push b
|push a
|call sub
ДЗ - записать программу, где ...чего то sub call

extern "C" int sub(int, int); - как из плюсов вызвать функцию

важные регистры, сохраняющие все: ebx, ebp, esi, edi
не очень важные(их могут в ЛЮБОЕ время испортиться): eax, ecx, edx
189
правок

Навигация