стрельба по-македонски ДМИТРИЙ КОВАЛЕНКО Спецвыпуск: Хакер, номер #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), заточенные для решения узконаправленных задач. |