Участник:GeraltFromRivia/Лекция асм 03 — различия между версиями
(Новая страница: « global _start ;метки бывают локальные и глобальные, они могут пересечься(лок временный функ...») |
(нет различий)
|
Текущая версия на 15:25, 28 июня 2012
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