powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi+asm
49 сообщений из 49, показаны все 2 страниц
Delphi+asm
    #39871511
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть массив
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  arr:  array[0..84991] of Byte =(
$4d,$5a,$90,$00,$03,$00,$00,$00,$04,$00,$00,$00,$ff,$ff,$00,$00,
$b8,$00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$00,
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,...
......
$00);
y:Pointer;



Не получается запустить его на выполнение:

Код: pascal
1.
2.
3.
4.
5.
asm
  MOV EAX, y
  LEA EBX, arr[0]
  CALL EBX
end;


Помогите запустить массив.

Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871515
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Delphi+asm
    #39871520
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Delphi+asm
    #39871523
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_WatcheralekcvpDelphi_Watcher,
https://stackoverflow.com/questions/38113551/can-i-execute-code-that-resides-in-data-segment-elf-binary
не понятная статья
Тогда, в твоём случае: выполнять код, который находится в сегменте данных, запрещено на аппаратном уровне.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871527
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, ДА можно как то на ассемблере выполнять код из массива делфи.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871535
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый вопрос - зачем? Антивирусы позлить? ну если, чисто теоретически, то я бы попробовал сделать фейковую процедуру без параметров, которую оптимизатор не понимает, что ее можно выкинуть. Попытался записать исполняемый код в ее тушку, и перекрестясь....
...
Рейтинг: 0 / 0
Delphi+asm
    #39871548
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите что нужно в эти трех строках изменить, очень нужно.
MOV EAX, y
LEA EBX, arr[0]
CALL EBX
...
Рейтинг: 0 / 0
Delphi+asm
    #39871549
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прямо в своей ассемблерной процедуре, забейте 1000 NOP - ов, или еще какой то фигни, и по этому адресу и пишите свой код из массива. а потом выполняйте.
..................
если прям хочется интересной жизни
...
Рейтинг: 0 / 0
Delphi+asm
    #39871559
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcherподскажите что нужно в эти трех строках изменить, очень нужно.
MOV EAX, y
LEA EBX, arr[0]
CALL EBX

1) это курсовик или что?
2) я с ассемблером работал 20 лет назад. Не все на лету помню.
3) вставьте в ассемблерный код кучу нопов, и присвойте метку. Считайте адрес метки, и пропишите туда массив, байт за байтом или слово за словом. Потом сделайте туда джамп или колл. На метку. Где раньше были НОПЫ а теперь прилетело из массива.

антивирь скорее всего временно стоит отключить.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871565
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если эта инструкция непонятна, лучше найти того кто ее понимает, или подождать критики этого подхода людьми, которые лучше понимают как работают современные процессоры и операционные системы.

Вариант. Записывать байт за байтом в правильное место dll свой код. Динамически загружать. Вызывать ее метод.
Профит!
...
Рейтинг: 0 / 0
Delphi+asm
    #39871569
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут как то все проще делается, есть массив в который калькулятор запихнул, как мне этот массив выполнить на asm что бы калькулятор открылся.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871609
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir BaskakovDelphi_Watcherподскажите что нужно в эти трех строках изменить, очень нужно.
MOV EAX, y
LEA EBX, arr[0]
CALL EBX

1) это курсовик или что?
2) я с ассемблером работал 20 лет назад. Не все на лету помню.
3) вставьте в ассемблерный код кучу нопов, и присвойте метку. Считайте адрес метки, и пропишите туда массив, байт за байтом или слово за словом. Потом сделайте туда джамп или колл. На метку. Где раньше были НОПЫ а теперь прилетело из массива.

антивирь скорее всего временно стоит отключить.

Да мне пофиг на этот антивирус, мне надо запустить массив командами asm.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871617
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант можно сделать так.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
unit CnCallBack;

interface

uses
  Classes, Windows, SysUtils;

type
  ECallBackException = class(Exception)
  end;

function StdcallMethodToCallBack(ASelf: Pointer; AMethodAddr: Pointer): Pointer;
{* Ѕ« stdcall µДАаіЙФ±єЇКэєНКµАэјУТФ°ьЧ°Ј¬·µ»ШТ»ёцРВµД stdcall µД»ШµчєЇКэµШЦ· }

{* К№УГУп·Ё:
  @AStdCallbackFunc := StdcallMethodToCallBack(AObject, @TAObject.CallbackMethod);
  ЖдЦР AStdCallbackFunc єН CallbackMethod ¶ј±ШРлК№УГ stdcall ЙщГчЎЈ
}

implementation

type
  TCnCallback = array [1..18] of Byte; // °ґґъВлЦРЧоі¤µДАґ
  PCnCallback = ^TCnCallback;
  
const
  THUNK_SIZE = 4096; // x86 ТіґуРЎЈ¬ДїЗ°Ц»ЕЄТ»ёцТіГж

  StdcallCode: TCnCallback =
    ($8B,$04,$24,$50,$B8,$00,$00,$00,$00,$89,$44,$24,$04,$E9,$00,$00,$00,$00);

  {----------------------------}
  { Stdcall CallbackCode ASM   }
  {----------------------------}
  {    MOV EAX, [ESP];         }
  {    PUSH EAX;               }
  {    MOV EAX, ASelf;         }
  {    MOV [ESP+4], EAX;       }
  {    JMP AMethodAddr;        }
  {----------------------------}

var
  FCallBackPool: Pointer = nil;
  FEmptyPtr: Integer = 0;
  FCS: TRTLCriticalSection;

procedure InitCallBackPool;
begin
  FCallBackPool := VirtualAlloc(nil, THUNK_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  if FCallBackPool = nil then
    raise ECallBackException.Create('Callback Pool Init Error!');
end;

function StdcallMethodToCallBack(ASelf: Pointer; AMethodAddr: Pointer): Pointer;
var
  Instance: PCnCallback;
begin
  Result := nil;
  Instance := nil;
  
  try
    EnterCriticalSection(FCS);

    if FCallBackPool = nil then
    begin
      InitCallBackPool;
      Instance := FCallBackPool;
    end
    else
    begin
      if FEmptyPtr = (THUNK_SIZE div SizeOf(TCnCallback)) then
        raise ECallBackException.Create('Callback Pool Overflow!');

      Inc(FEmptyPtr);
      Instance := PCnCallback(Integer(FCallBackPool) + FEmptyPtr * SizeOf(TCnCallback));
    end;
  finally
    LeaveCriticalSection(FCS);
  end;

  if Instance <> nil then
  begin
    Move(StdcallCode, Instance^, SizeOf(TCnCallback));
    PInteger(@(Instance^[6]))^ := Integer(ASelf);
    PInteger(@(Instance^[15]))^ := Integer(Integer(AMethodAddr) - Integer(Instance) - 18);
    Result := Instance;
  end;
end;

initialization
  InitializeCriticalSection(FCS);

finalization
  DeleteCriticalSection(FCS);
  if FCallBackPool <> nil then
    VirtualFree(FCallBackPool, 0, MEM_RELEASE);

end.


...
Рейтинг: 0 / 0
Delphi+asm
    #39871621
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ziv-2014Как вариант можно сделать так.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
unit CnCallBack;

interface

uses
  Classes, Windows, SysUtils;

type
  ECallBackException = class(Exception)
  end;

function StdcallMethodToCallBack(ASelf: Pointer; AMethodAddr: Pointer): Pointer;
{* Ѕ« stdcall µДАаіЙФ±єЇКэєНКµАэјУТФ°ьЧ°Ј¬·µ»ШТ»ёцРВµД stdcall µД»ШµчєЇКэµШЦ· }

{* К№УГУп·Ё:
  @AStdCallbackFunc := StdcallMethodToCallBack(AObject, @TAObject.CallbackMethod);
  ЖдЦР AStdCallbackFunc єН CallbackMethod ¶ј±ШРлК№УГ stdcall ЙщГчЎЈ
}

implementation

type
  TCnCallback = array [1..18] of Byte; // °ґґъВлЦРЧоі¤µДАґ
  PCnCallback = ^TCnCallback;
  
const
  THUNK_SIZE = 4096; // x86 ТіґуРЎЈ¬ДїЗ°Ц»ЕЄТ»ёцТіГж

  StdcallCode: TCnCallback =
    ($8B,$04,$24,$50,$B8,$00,$00,$00,$00,$89,$44,$24,$04,$E9,$00,$00,$00,$00);

  {----------------------------}
  { Stdcall CallbackCode ASM   }
  {----------------------------}
  {    MOV EAX, [ESP];         }
  {    PUSH EAX;               }
  {    MOV EAX, ASelf;         }
  {    MOV [ESP+4], EAX;       }
  {    JMP AMethodAddr;        }
  {----------------------------}

var
  FCallBackPool: Pointer = nil;
  FEmptyPtr: Integer = 0;
  FCS: TRTLCriticalSection;

procedure InitCallBackPool;
begin
  FCallBackPool := VirtualAlloc(nil, THUNK_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  if FCallBackPool = nil then
    raise ECallBackException.Create('Callback Pool Init Error!');
end;

function StdcallMethodToCallBack(ASelf: Pointer; AMethodAddr: Pointer): Pointer;
var
  Instance: PCnCallback;
begin
  Result := nil;
  Instance := nil;
  
  try
    EnterCriticalSection(FCS);

    if FCallBackPool = nil then
    begin
      InitCallBackPool;
      Instance := FCallBackPool;
    end
    else
    begin
      if FEmptyPtr = (THUNK_SIZE div SizeOf(TCnCallback)) then
        raise ECallBackException.Create('Callback Pool Overflow!');

      Inc(FEmptyPtr);
      Instance := PCnCallback(Integer(FCallBackPool) + FEmptyPtr * SizeOf(TCnCallback));
    end;
  finally
    LeaveCriticalSection(FCS);
  end;

  if Instance <> nil then
  begin
    Move(StdcallCode, Instance^, SizeOf(TCnCallback));
    PInteger(@(Instance^[6]))^ := Integer(ASelf);
    PInteger(@(Instance^[15]))^ := Integer(Integer(AMethodAddr) - Integer(Instance) - 18);
    Result := Instance;
  end;
end;

initialization
  InitializeCriticalSection(FCS);

finalization
  DeleteCriticalSection(FCS);
  if FCallBackPool <> nil then
    VirtualFree(FCallBackPool, 0, MEM_RELEASE);

end.




а мой код как то можно поправить?
...
Рейтинг: 0 / 0
Delphi+asm
    #39871623
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_WatcherТут как то все проще делается, есть массив в который калькулятор запихнул, как мне этот массив выполнить на asm что бы калькулятор открылся.

открыть калькулятор через ассемблер, это собеседование или курсовик.
Если курсовик, то его знают сокурсники. Если собеседование, то нафига работа в которой не понимаешь .....
Сорри если что не так.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871624
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcherziv-2014Как вариант можно сделать так.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
unit CnCallBack;

interface

uses
  Classes, Windows, SysUtils;

type
  ECallBackException = class(Exception)
  end;

function StdcallMethodToCallBack(ASelf: Pointer; AMethodAddr: Pointer): Pointer;
{* Ѕ« stdcall µДАаіЙФ±єЇКэєНКµАэјУТФ°ьЧ°Ј¬·µ»ШТ»ёцРВµД stdcall µД»ШµчєЇКэµШЦ· }

{* К№УГУп·Ё:
  @AStdCallbackFunc := StdcallMethodToCallBack(AObject, @TAObject.CallbackMethod);
  ЖдЦР AStdCallbackFunc єН CallbackMethod ¶ј±ШРлК№УГ stdcall ЙщГчЎЈ
}

implementation

type
  TCnCallback = array [1..18] of Byte; // °ґґъВлЦРЧоі¤µДАґ
  PCnCallback = ^TCnCallback;
  
const
  THUNK_SIZE = 4096; // x86 ТіґуРЎЈ¬ДїЗ°Ц»ЕЄТ»ёцТіГж

  StdcallCode: TCnCallback =
    ($8B,$04,$24,$50,$B8,$00,$00,$00,$00,$89,$44,$24,$04,$E9,$00,$00,$00,$00);

  {----------------------------}
  { Stdcall CallbackCode ASM   }
  {----------------------------}
  {    MOV EAX, [ESP];         }
  {    PUSH EAX;               }
  {    MOV EAX, ASelf;         }
  {    MOV [ESP+4], EAX;       }
  {    JMP AMethodAddr;        }
  {----------------------------}

var
  FCallBackPool: Pointer = nil;
  FEmptyPtr: Integer = 0;
  FCS: TRTLCriticalSection;

procedure InitCallBackPool;
begin
  FCallBackPool := VirtualAlloc(nil, THUNK_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  if FCallBackPool = nil then
    raise ECallBackException.Create('Callback Pool Init Error!');
end;

function StdcallMethodToCallBack(ASelf: Pointer; AMethodAddr: Pointer): Pointer;
var
  Instance: PCnCallback;
begin
  Result := nil;
  Instance := nil;
  
  try
    EnterCriticalSection(FCS);

    if FCallBackPool = nil then
    begin
      InitCallBackPool;
      Instance := FCallBackPool;
    end
    else
    begin
      if FEmptyPtr = (THUNK_SIZE div SizeOf(TCnCallback)) then
        raise ECallBackException.Create('Callback Pool Overflow!');

      Inc(FEmptyPtr);
      Instance := PCnCallback(Integer(FCallBackPool) + FEmptyPtr * SizeOf(TCnCallback));
    end;
  finally
    LeaveCriticalSection(FCS);
  end;

  if Instance <> nil then
  begin
    Move(StdcallCode, Instance^, SizeOf(TCnCallback));
    PInteger(@(Instance^[6]))^ := Integer(ASelf);
    PInteger(@(Instance^[15]))^ := Integer(Integer(AMethodAddr) - Integer(Instance) - 18);
    Result := Instance;
  end;
end;

initialization
  InitializeCriticalSection(FCS);

finalization
  DeleteCriticalSection(FCS);
  if FCallBackPool <> nil then
    VirtualFree(FCallBackPool, 0, MEM_RELEASE);

end.




а мой код как то можно поправить?
Там же Делфийским языком написано:
1. Выдели память для исполнения
2. Скопируй туда свой код
3. Вызови код
4. Очисти память после вызова
Дальше же сам думай, крутись :)
...
Рейтинг: 0 / 0
Delphi+asm
    #39871625
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ziv-2014Delphi_Watcherпропущено...


а мой код как то можно поправить?
Там же Делфийским языком написано:
1. Выдели память для исполнения
2. Скопируй туда свой код
3. Вызови код
4. Очисти память после вызова
Дальше же сам думай, крутись :)

Нет мне так не пойдет, у меня этот код как то работал, вот пытаюсь восстановить...
...
Рейтинг: 0 / 0
Delphi+asm
    #39871626
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня тремя строками запускался массив, просто забыл как((( помогите кто знает
...
Рейтинг: 0 / 0
Delphi+asm
    #39871630
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FCallBackPool := VirtualAlloc(nil, THUNK_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
- это кстати объясняет, где я глупость сказал. конечно же прав на запись на те участки, где лежит код может и не быть.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871631
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_WatcherУ меня тремя строками запускался массив, просто забыл как((( помогите кто знает

на каком процессоре или операционке?
...
Рейтинг: 0 / 0
Delphi+asm
    #39871632
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_WatcherУ меня тремя строками запускался массив, просто забыл как(((

Времена DOS давно прошли, теперь запрещены почти все трюки внедрения исполняемого кода.
Вызывай свой калькулятор через CreateProcess('calc.exe') и не выпендривайся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delphi+asm
    #39871633
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Vladimir BaskakovDelphi_WatcherУ меня тремя строками запускался массив, просто забыл как((( помогите кто знает

на каком процессоре или операционке?
и под какими дельфями
...
Рейтинг: 0 / 0
Delphi+asm
    #39871636
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecatorVladimir Baskakovпропущено...


на каком процессоре или операционке?
и под какими дельфями
Если память не изменяет то по Delphi 7.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871637
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Delphi_Watcherziv-2014пропущено...

Там же Делфийским языком написано:
1. Выдели память для исполнения
2. Скопируй туда свой код
3. Вызови код
4. Очисти память после вызова
Дальше же сам думай, крутись :)

Нет мне так не пойдет, у меня этот код как то работал, вот пытаюсь восстановить...
почему не подойдёт ? за тебя уже всё сделано, осталось три строки написать
...
Рейтинг: 0 / 0
Delphi+asm
    #39871642
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcherziv-2014пропущено...

Там же Делфийским языком написано:
1. Выдели память для исполнения
2. Скопируй туда свой код
3. Вызови код
4. Очисти память после вызова
Дальше же сам думай, крутись :)

Нет мне так не пойдет, у меня этот код как то работал, вот пытаюсь восстановить...
Тогда сиди и плач
...
Рейтинг: 0 / 0
Delphi+asm
    #39871644
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очередной кулхацкер))))

вот тебе рабочее решение - формируешь в памяти dll, пишешь её на диск, загружаешь и вызываешь из dll нужный тебе код.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871674
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir BaskakovВариант. Записывать байт за байтом в правильное место dll свой код. Динамически загружать. Вызывать ее метод.
Профит!Азам вирусостроения учишь?
...
Рейтинг: 0 / 0
Delphi+asm
    #39871678
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_WatcherПомогите запустить массив

Delphi XE7
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var
  Code : array[0 .. 63] of byte =
       ( $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
         $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
         $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
         $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$C3 );

procedure ExecCode( Code : pointer ); assembler;
asm
     Push    EBX
     Mov     EBX,    EAX
     Call    EBX
     Pop     EBX
end;

procedure TForm10.Button1Click(Sender: TObject);
begin
  ExecCode( @Code );
end;



С уважением, Polesov.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871679
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,
более того, работает в варианте
Код: pascal
1.
2.
3.
4.
procedure ExecCode( Code : pointer ); assembler;
asm
     Call    EAX
end;
...
Рейтинг: 0 / 0
Delphi+asm
    #39871680
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovDelphi_WatcherПомогите запустить массив

Delphi XE7
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var
  Code : array[0 .. 63] of byte =
       ( $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
         $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
         $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
         $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$C3 );

procedure ExecCode( Code : pointer ); assembler;
asm
     Push    EBX
     Mov     EBX,    EAX
     Call    EBX
     Pop     EBX
end;

procedure TForm10.Button1Click(Sender: TObject);
begin
  ExecCode( @Code );
end;



С уважением, Polesov.
А то, что в сегменте .data нельзя исполнять код, это как?
...
Рейтинг: 0 / 0
Delphi+asm
    #39871684
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014А то, что в сегменте .data нельзя исполнять код, это как?
Массив содержит 63 инструкции Nop и последний байт инструкция Ret.
Трассировка показывает, что код исполняется именно этот код.

Единственное, что приходит на ум - а константный массив Code расположен в сегменте .data?
...
Рейтинг: 0 / 0
Delphi+asm
    #39871693
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,
Вот значения адресов, полученные в отладчике:
Код: powershell
1.
2.
3.
005DB54C  - procedure ExecCode
005DB650  - method Button1Click
005E89C0  - Code : array

Есть ли способ получить адрес с нулевым смещением в сегменте .data?
...
Рейтинг: 0 / 0
Delphi+asm
    #39871705
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,
цитатаВ плоской 32-битной модели памяти все сегментные регистры нормально указывают на один и тот же сегмент памяти
И в отладчике это видно.
...
Рейтинг: 0 / 0
Delphi+asm
    #39871730
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesovziv-2014А то, что в сегменте .data нельзя исполнять код, это как?
Массив содержит 63 инструкции Nop и последний байт инструкция Ret.
Трассировка показывает, что код исполняется именно этот код.

Единственное, что приходит на ум - а константный массив Code расположен в сегменте .data?
Вероятно винда считает EXE-ник кривым и для совместимости запускает без DEP. Фигасе :)
...
Рейтинг: 0 / 0
Delphi+asm
    #39871740
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014Вероятно винда считает EXE-ник кривым и для совместимости запускает без DEP. Фигасе :)
Может быть, дело в этом (Windows 8.1)?
...
Рейтинг: 0 / 0
Delphi+asm
    #39871753
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesovziv-2014Вероятно винда считает EXE-ник кривым и для совместимости запускает без DEP. Фигасе :)
Может быть, дело в этом (Windows 8.1)?
Дело в этом!
...
Рейтинг: 0 / 0
Delphi+asm
    #39871817
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014Дело в этом!Ну, вот и разобрались.
Значит, мой способ не работоспособный.
...
Рейтинг: 0 / 0
Delphi+asm
    #39872246
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда помощи ноль вообщем ((
...
Рейтинг: 0 / 0
Delphi+asm
    #39872278
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_WatcherМда помощи ноль вообщем ((
Тебе уже все объяснили и дали. Только нос ты свой воротишь и принимать не хочешь.
...
Рейтинг: 0 / 0
Delphi+asm
    #39872394
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ziv-2014Delphi_WatcherМда помощи ноль вообщем ((
Тебе уже все объяснили и дали. Только нос ты свой воротишь и принимать не хочешь.
Что дали то? нарабочий код, отлично!
Не работает этот способ:
var
Code : array[0 .. 63] of byte =
( $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$C3 );

procedure ExecCode( Code : pointer ); assembler;
asm
Push EBX
Mov EBX, EAX
Call EBX
Pop EBX
end;

procedure TForm10.Button1Click(Sender: TObject);
begin
ExecCode( @Code );
end;
...
Рейтинг: 0 / 0
Delphi+asm
    #39872404
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcherziv-2014пропущено...

Тебе уже все объяснили и дали. Только нос ты свой воротишь и принимать не хочешь.
Что дали то? нарабочий код, отлично!
Не работает этот способ:
var
Code : array[0 .. 63] of byte =
( $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$C3 );

procedure ExecCode( Code : pointer ); assembler;
asm
Push EBX
Mov EBX, EAX
Call EBX
Pop EBX
end;

procedure TForm10.Button1Click(Sender: TObject);
begin
ExecCode( @Code );
end;

asutp2вот тебе рабочее решение - формируешь в памяти dll, пишешь её на диск, загружаешь и вызываешь из dll нужный тебе код.
...
Рейтинг: 0 / 0
Delphi+asm
    #39872413
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcherziv-2014пропущено...

Тебе уже все объяснили и дали. Только нос ты свой воротишь и принимать не хочешь.
Что дали то? нарабочий код, отлично!
Не работает этот способ:
var
Code : array[0 .. 63] of byte =
( $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$C3 );

procedure ExecCode( Code : pointer ); assembler;
asm
Push EBX
Mov EBX, EAX
Call EBX
Pop EBX
end;

procedure TForm10.Button1Click(Sender: TObject);
begin
ExecCode( @Code );
end;

Как нерабочий? под какой то winXP заработает. А под десяткой с антивирусом так себе. Правила игры поменялись, и так как раньше уже нельзяю

А и ну зачем. Для динамического формирования исполняемого кода никак не хуже брать платформу .net , где все это окультурено - компиляция на лету, запуск....
...
Рейтинг: 0 / 0
Delphi+asm
    #39872429
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcherziv-2014пропущено...

Тебе уже все объяснили и дали. Только нос ты свой воротишь и принимать не хочешь.
Что дали то? нарабочий код, отлично!
Не работает этот способ:
var
Code : array[0 .. 63] of byte =
( $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$C3 );

procedure ExecCode( Code : pointer ); assembler;
asm
Push EBX
Mov EBX, EAX
Call EBX
Pop EBX
end;

procedure TForm10.Button1Click(Sender: TObject);
begin
ExecCode( @Code );
end;
Напиши утилиту, которая запихнет Code в сегмент .text (он на исполнение) и наслаждайся.
...
Рейтинг: 0 / 0
Delphi+asm
    #39876151
527470
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Delphi_WatcherНе работает этот способ:

Максимально информативно. А если я скажу что работает?
...
Рейтинг: 0 / 0
Delphi+asm
    #39876154
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
527470,

Тебе скажут что ты принудительно отключил защиту в винде.
...
Рейтинг: 0 / 0
Delphi+asm
    #39876192
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat527470,
Тебе скажут что ты принудительно отключил защиту в винде.
Кстати, в десктопных ОС, в отличие от серверных, она ЕМНИП по-умолчанию в таком положении.
...
Рейтинг: 0 / 0
Delphi+asm
    #39876222
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpКстати, в десктопных ОС, в отличие от серверных, она ЕМНИП по-умолчанию в таком положении.
Это не повод расчитывать на подобное.
Вполне может быть заоверрайжено через политики.
...
Рейтинг: 0 / 0
Delphi+asm
    #39876708
Delphi_Watcher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ziv-2014Delphi_Watcherпропущено...

Что дали то? нарабочий код, отлично!
Не работает этот способ:
var
Code : array[0 .. 63] of byte =
( $90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,
$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$90,$C3 );

procedure ExecCode( Code : pointer ); assembler;
asm
Push EBX
Mov EBX, EAX
Call EBX
Pop EBX
end;

procedure TForm10.Button1Click(Sender: TObject);
begin
ExecCode( @Code );
end;
Напиши утилиту, которая запихнет Code в сегмент .text (он на исполнение) и наслаждайся.
http://joxi.ru/nAyYoEVfgL5vaA
...
Рейтинг: 0 / 0
Delphi+asm
    #39876712
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi_Watcherziv-2014пропущено...

Напиши утилиту, которая запихнет Code в сегмент .text (он на исполнение) и наслаждайся.
http://joxi.ru/nAyYoEVfgL5vaA
В чем проблема? Отключи DEP и будет тебе счастье?
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi+asm
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]