Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #71, ОКТЯБРЬ 2006 г.

стрельба по-македонски

ДМИТРИЙ КОВАЛЕНКО

Спецвыпуск: Хакер, номер #071, стр. 071-040-7


}

#include <stdio.h>

char format[] = "%s %s\n";

int main()

{

char i = 1;

int j;

__asm{

mov eax, offset format ; заносим в eax смещение строки format

mov bl, byte ptr [eax] ; заносим в bl первый символ строки

mov i, bl ; копируем bl в переменную i

mov j, 1 ; заносим в переменную j единицу

inc j ; инкрементируем j

}

}

#include <stdio.h>

struct my_str1{

int mem1;

char both;

};

struct my_str2{

int mem2;

char both;

};

int main()

{

my_str1 str1;

my_str2 str2;

__asm{

lea eax, str1 ; заносим в eax адрес str1

; поскольку both есть и в str1 и в str2, для доступа к

; str1.both нужно явно указывать str1

mov [eax]str1.both, 1

; поскольку mem1 есть только в str1, для доступа к str1.mem

; указывать str1 не обязательно

mov [eax].mem1, 1

}

}

#include <stdio.h>

int main()

{

int i;

__asm{

; установим eax в 1

mov eax,1

}

// выведем значение eax

printf("EAX=1\n");

__asm{

; присвоим значение eax переменной i

mov i, eax

}

// выведем значение eax и убедимся, что оно

// не совпадает с предыдущим

printf("EAX=%d", i);

}

program Example;

{$APPTYPE CONSOLE}

var

myVar: integer;

begin

asm

mov myVar, -1

mov eax, offset myVar {offset с глобальной переменной}

mov bl, byte ptr [eax+2]{выражение MASM}

@@1: {локальная ссылка}

dec eax

cmp bl, 0

jl @@1

end;

end.

program Example2;

{$APPTYPE CONSOLE}

label lab1; {объявляем глобальную метку}

begin

asm

jmp lab1 {безусловный переход на глобальную метку}

mov eax, 1

lab1:

end;

end.

program Example3;

{$APPTYPE CONSOLE}

label lab1;

var

a: record

a_mem: integer;

a_mem2: char;

end;

i: integer;

begin

asm

{работаем с переменной i}

mov eax, 1

mov i, eax

{работаем с записью a}

mov eax, offset a

{при обращении к a_mem запись a указывать обязательно

и именно в таком формате}

mov [eax+a].a_mem, 1

end;

end.

DYNAMIC LINK LIBRARIES

DLL — ОДИН ИЗ САМЫХ ПРОСТЫХ И ПРАВИЛЬНЫХ СПОСОБОВ ПРОГРАММИРОВАНИЯ НА НЕСКОЛЬКИХ ЯЗЫКАХ. ДЛЯ ОЗНАКОМЛЕНИЯ РЕКОМЕНДУЕТСЯ ПОЧИТАТЬ ДВЕ ОЧЕНЬ ХОРОШИЕ СТАТЬИ:

1 А.Н. ВАЛЬВАЧЕВ, К.А. СУРКОВ, Д.А. СУРКОВ, Ю.М. ЧЕТЫРЬКО

«ДИНАМИЧЕСКИ ЗАГРУЖАЕМЫЕ БИБЛИОТЕКИ»

WWW.RSDN.RU/ARTICLE/DELPHI/DELPHI_7_05.XML

2 А. УВАРОВ

«РАБОТА С БИБЛИОТЕКАМИ ДИНАМИЧЕСКОЙ КОМПОНОВКИ (DLL)»

WWW.REALCODING.NET/ARTICLE/VIEW/2713

В ЭТИХ СТАТЬЯХ ИЗЛОЖЕНО ПРАКТИЧЕСКИ ВСЕ НЕОБХОДИМОЕ, ЧТОБЫ НАЧАТЬ СОЗДАВАТЬ И ИСПОЛЬЗОВАТЬ DLL НА VISUAL C++ И DELPHI. ЕСЛИ ЭТОГО ПОКАЖЕТСЯ МАЛО – GOOGLE В ПОМОЩЬ

МНЕНИЕ ЭКСПЕРТА

Вавилонская башня языков программирования

Крис Касперски

«Зачем так много языков, неужели нельзя было обойтись одним, а теперь вот сиди и учи!» Но на самом деле их не так уж и много, да и те исповедуют схожие концепции и парадигмы. Инновация, появившаяся в одном из них, со временем проникает во все остальные. Языки, выпадающие из этой общей группы, просто не выживают (форт, лисп). Язык определяет сознание, а сознание, в свою очередь, формирует язык. Один. Конец XX века прошел под знаменем ООП, распространившим свое влияние практически на все языки и даже просочившимся в ассемблер!

Новые языки возникают всякий раз, когда их творец сталкивается с задачей, для реализации которой не существует адекватных инструментов. Тогда он берет наиболее близкие ему парадигмы, добавляет несколько свежих идей и… если язык получается удачным, им начинают пользоваться во всем мире. Это эволюционный путь языкового развития (B-> C-> C ++). Так же существует специализированные языки (sh, php, sql), заточенные для решения узконаправленных задач.

Назад на стр. 071-040-6  Содержание  Вперед на стр. 071-040-8