Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Delphi/Asm, вставки в делфи 
:(
    Опции темы
ne0n
Дата 21.11.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Ребята , вот в моей программе потребовалось использование вставок Asm,
но с asm у меня плохо(умею складывать, умножать числаsmile). Может кто подскажет статьи
для работы с асмом в делфи.
Дело втом что у всех асмовских компиляторов свой синтаксис, и фигануть между
asm..end скопированный(Ну там Masmа например) код не прокатит!!!!
И в качестве примера(если не сложно) покажите как выводить мессагу на асме(
тобиш как ето сделать asm вставками в Делфи)!

заранее благодарю!!!
PM MAIL ICQ   Вверх
oleg1973
Дата 21.11.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



наверно так
_asm
push 0
push text
push text
push 0
call dword [MessageBoxA]
.end


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
ne0n
Дата 21.11.2005, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Цитата(oleg1973 @ 21.11.2005, 16:03)
наверно так
_asm
push 0
push text
push text
push 0
call dword [MessageBoxA]
.end


Не работает!!!!

Ну не ужели ни кто не пользуетсь asm вставками???!!!
и ни укого нет информации!???!! smile

PM MAIL ICQ   Вверх
DemoCode
Дата 21.11.2005, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 2
Всего: 41



Цитата(ne0n @ 21.11.2005, 15:16)
Может кто подскажет статьи
для работы с асмом в делфи.


Очень хороший материал на эту тему (на англицком)
Learn Assembler with Delphi
Можно скачать

http://www.vbooks.ru/AUTHORS/YAN-HODGER/031530.html#
http://bookz.ru/authors/an-hodger/assmdelphi.html




--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
oleg1973
Дата 21.11.2005, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



ne0n
не работает или не компилится?


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
ne0n
Дата 21.11.2005, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Цитата(DemoCode @ 21.11.2005, 19:48)
Очень хороший материал на эту тему (на англицком)
Learn Assembler with Delphi
Можно скачать

http://www.vbooks.ru/AUTHORS/YAN-HODGER/031530.html#
http://bookz.ru/authors/an-hodger/assmdelphi.html

Спасибо(жалко что на англицком, ну да ладно)!!!

Народ что, ни кто не сталкивался с такой проблемой????

Добавлено @ 20:03
Цитата(oleg1973 @ 21.11.2005, 19:56)
не работает или не компилится?

компилится с небольшими исправлениями:
Код

asm
push 0
push '123'
push '1234'
push 0
call dword [MessageBoxA]
end;


я этот код момещал на обработчике нажатия кнопки, скомпилился номально,
а вот когда кнопульку нажимаешь- полная попа!!!

PM MAIL ICQ   Вверх
Rennigth
Дата 22.11.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



ne0n
я конечно не специалист в этой области, но для примера: (управление спикером) (beep короче):
Код

procedure Delay(ms: LongInt);
var
  lTime : LongInt;
begin
  lTime := GetTickCount + ms;
  while GetTickCount < lTime do
    Application.ProcessMessages;
end;


procedure Beep;
asm
  push ax
  mov    al,0b6h
  out    43h,al
  mov    ax,2000
  out    42h,al
  mov    al,ah
  out    42h,al
  in    al,61h
  or    al,3
  out    61h,al
  pop ax
end;

delay(1000);

asm
  push ax
  and    al,11111100b
  out    61h,al    
  pop ax
end;

end;


или например такая функция:
Код

(* фукция преобразует окончание строки(существительного) в зависимости от количества  *)
(* например : 1 урок , 2 урока, 7 уроков *)
(* типа родительский падеж *)
function GetStringInRP(const AString: string; ANumber: DWord): string;
var
  lRest: Dword;
begin
  (* Mod *)
  asm
    push EDX
    push EBX
    push EAX
    xor EDX, EDX
    xor EBX, EBX
    mov EAX, ANumber
    mov EBX, 64h
    div BX
    mov lRest, EDX
    pop EAX
    pop EBX
    pop EDX
  end;
// пердусмотренны ситуации когда сущ. оканчивается на твердую согласную
// и мягкий знак (возможна неправильная работа с непредусмотренными существительными)
  if AString[length(AString)] <> 'ь' then
  begin
    case lRest of
      1: Result := AString;
      2..4: Result := AString + 'а';
      0,5..99: Result := AString + 'ов';
    end;
  end else begin
    case lRest of
      1: Result := AString;
      2..4:
      begin
        Result := AString;
        Result[Length(Result)] := 'я';
      end;
      0,5..99:
      begin
        Result := AString;
        Result[Length(Result)] := 'е';
        Result := Result + 'й';
      end;
    end;
  end;
end;



Это сообщение отредактировал(а) Rennigth - 22.11.2005, 10:21


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Rennigth
Дата 22.11.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(ne0n @ 21.11.2005, 14:16)
вот в моей программе потребовалось использование вставок Asm

по конкретнее бы сказал что нужно, глядишь помогли бы чем смогли... smile



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Girder
Дата 22.11.2005, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Код
procedure TForm1.Button1Click(Sender: TObject);
var T,C:string;
    pt,pc:Pointer;
begin
 T:='Эх...';
 C:='Ух...';
 pt:=@T[1];
 pc:=@C[1];
 asm
  pushad
  push MB_YESNO
  push pc
  push pt
  push 0
  call MessageBoxA
  popad
 end;
end;


Это сообщение отредактировал(а) Girder - 22.11.2005, 12:09


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
ne0n
Дата 22.11.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Цитата(Rennigth @ 22.11.2005, 10:30)
по конкретнее бы сказал что нужно, глядишь помогли бы чем смогли... smile

Не давно постил топик(в котором пояснял что создаю протектор файлов).
Так вот научился внедрять команды asm в исполняемый файл(Благодоря Arazel'y, респект этому
челу!!!!!!!!).
Тобишь внедрить то я могу а вот процедуру проверки crc не могу(т.к она долхна быть на asm'e)
Вот и спрашиваю у вас!!!! Может кто что модскажет!!!



Girder спасибо за премерчик!!! А ты где брал инфу, сам догнал или методом научной дидукции smile
PM MAIL ICQ   Вверх
Girder
Дата 22.11.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата(ne0n @ 22.11.2005, 17:55)
Girder спасибо за премерчик!!! А ты где брал инфу, сам догнал или методом научной дидукции
Нет я из очень умной книжки передрал smile

PS: Ну ты даеш... smile



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Rennigth
Дата 22.11.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



smile
Girder
литературы под рукой нету, хотел спросить
Код

pushad
...
popad

это что? все регистры в стэк и обратно потом? типа:
Код

push AX
push BX
// итд.
...
push BX
push AX

?


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
ne0n
Дата 22.11.2005, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Цитата(Girder @ 22.11.2005, 12:08)
var T,C:string;
    pt,pc:Pointer;
begin
T:='Эх...';
C:='Ух...';
pt:=@T[1];
pc:=@C[1];
asm
  pushad
  push MB_YESNO
  push pc
  push pt
  push 0
  call MessageBoxA
  popad
end;
end;

Впринципе все хорошо, но мне код нужен на чистом асме, у меня есть вункция ShellCode(после нее идет код который надо внедрять, без всяких var, begin итп)
Выглядит она должна так:
ShelCode;
asm
тут код на чистом асме.
end;

Цитата(Girder @ 22.11.2005, 17:59)
PS: Ну ты даеш... smile


в каком смысле?
PM MAIL ICQ   Вверх
ne0n
Дата 23.11.2005, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Неверю!!!!
Что никто не знает!!!!
PM MAIL ICQ   Вверх
oleg1973
Дата 23.11.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



а дельфи в асм вставках поддерживает DD или DB ?


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
ne0n
Дата 23.11.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Цитата(oleg1973 @ 23.11.2005, 17:29)
а дельфи в асм вставках поддерживает DD или DB ?

еслибы я знал асм я бы ответил!!!
PM MAIL ICQ   Вверх
Alexeis
Дата 24.11.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата
а дельфи в асм вставках поддерживает DD или DB ?

Создание новых переменных в asm вставках невозможно!!!


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
oleg1973
Дата 24.11.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



alexeis1
это не переменные
оно зарезервирует в случае с DD 4 байта при компиляции
или если сделать DB "HELLO WORLD" то "воткнет" текст непосредственно в код


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
ne0n
Дата 25.11.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 1
Всего: 11



Ну понятно, по ходу ни кто не знает smile
Блин конкретный облом!!!
Спасибо тем кто хоть попытался помочь!!!
PM MAIL ICQ   Вверх
Ciber SLasH
Дата 26.11.2005, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Цитата(ne0n)
Ну понятно, по ходу ни кто не знает

Ты бы лучше код выложил, тогда бы знали над чем работать !!
PM   Вверх
oleg1973
Дата 26.11.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



Код

begin
asm
  jmp go
pc:
   db 'xaxaxa',0
pt:
   db 'xoxoxo',0
go:
  pushad
  push MB_YESNO
  push pc
  push pt
  push 0
  call MessageBoxA
  popad
end;
end;

пробуй (к меня дельфи нет)

п.с.
запаришся ты без знания асма протектор писать - это однозначно


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Ciber SLasH
Дата 26.11.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Вот рабочее:
Код
  asm
        jmp @go
    @pc:
        db 'xaxaxax',0
    @pt:
        db 'xoxoxo',0
    @go:
        pushad
        push MB_YESNO
        push OFFSET @pc
        push OFFSET @pt
        push 0
        call MessageBoxA
        popad
  end;

Кстати в Delphi есть хэлп по работе с асмом: "Кнопка Пуск -> Borland Delphi 7 -> Help -> Object Pascal Reference -> раскрываем узел: Delphi Language Guide -> предпоследний пункт: Inline assembly code"

Привожу пример к Delphi7, т.к. у меня только эта версия.

Это сообщение отредактировал(а) Ciber SLasH - 27.11.2005, 12:53
PM   Вверх
RideX
Дата 28.11.2005, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 94
Регистрация: 8.9.2004

Репутация: 4
Всего: 7



Цитата(ne0n @ 22.11.2005, 20:55)
процедуру проверки crc не могу(т.к она долхна быть на asm'e)


Код

.const
   CRCPoly    equ   0EDB88320h
   _fmtHEX    TCHAR '%08X',0

.data?
   hFile          HANDLE ?
   hFileMap    HANDLE ?
   pMemory    LPCVOID ?
   fSize          DWORD ?
   szFileName TCHAR MAX_PATH dup(?)
   CRCTable    DWORD 256 dup(?)

.code
 start:
   call CreateTable

   mov hFile,eax

   invoke GetFileSize, hFile, NULL
   mov fSize, eax
   invoke CreateFileMapping, hFile, NULL, PAGE_READWRITE, 0, fSize, NULL
   mov hFileMap,eax
   invoke MapViewOfFile, hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0
   mov pMemory,eax

   push fSize
   push pMemory
   call CRC32

   push esi
   mov esi,eax

   invoke UnmapViewOfFile, pMemory
   invoke CloseHandle,hFileMap
   invoke CloseHandle,hFile

   invoke wsprintf, addr buff, addr _fmtHEX, esi
   invoke SetDlgItemText, hMainWnd, IDC_EDIT02, addr buff
   pop esi
@@:
;...
CreateTable proc uses ebx esi edi
    mov edi,offset CRCTable - 4
    xor ecx,ecx

m0:
    mov eax,ecx
    add edi,4
    mov esi,8
    @@:
    shr eax,1    
    sbb edx,edx  
    and edx,CRCPoly
    xor eax,edx
    sub esi,1
    jnz @b
    add ecx,1
    mov dword ptr[edi],eax
    cmp ecx,256
    jb m0
    ret
CreateTable endp

CRC32 proc lpData:DWORD, DataSize:DWORD
    push esi
    mov esi,lpData
    xor edx,edx
    or  eax,0FFFFFFFFh
    mov ecx, DataSize

    @@:
    mov dl, byte ptr[esi]
    xor dl, al
    shr eax, 8
    xor eax, dword ptr[CRCTable + 4*edx]
    add esi,1
    sub ecx,1
    jnz @b

    not eax
    pop esi
    ret
CRC32 endp

end start

PM   Вверх
DemoCode
Дата 1.12.2005, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 2
Всего: 41



Цитата
Спасибо(жалко что на англицком, ну да ладно)!!!

neOn, вот на русском

Использование ассемблера в Дельфи
http://podgoretsky.com/ftp/Docs/Delphi/basm/basmru.zip


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1141 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.