powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача аннонимной функции в cи библиотеку
25 сообщений из 53, страница 2 из 3
Передача аннонимной функции в cи библиотеку
    #39788346
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем вообще заниматься хакерством, если можно всё сделать на чистом Delphi и не лезть во внутренние структуры классов?

21836485
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788351
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм.. Вот так тоже работает корректно

Код: pascal
1.
2.
     mov self, 1703180
     mov self,  offset Enigne



Я взял адрес (EBP(0x0019FD04)) + 0x08 = 1703180

И структура self заполнилась
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788357
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот так вообще никак не реагирует

Код: pascal
1.
  PPointer(1703180)^ := @Enigne;
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788359
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это я ошибся. Ложная инфа. self оставил.
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788371
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мозг уже кипит. Мне совершенно непонятно с какой магической помощью работает данный ассемблер.

Почему вот это работает
Код: pascal
1.
2.
3.
4.
  asm
      mov [self], offset Enigne
  end;
= mov [ebp+$08],$005e61b4




А вот это не работает

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
  asm    mov eax,  [self]
    mov [eax], offset Enigne
  end;

=

mov eax,[ebp+$08]
mov [eax],$005e61b4



Притом если написать
mov eax, offset Enigne

То ничего не изменится в конечном результате.
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788390
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxpcМозг уже кипит. Мне совершенно непонятно с какой магической помощью работает данный ассемблер.



почитайте, что означают квадратные скобки в ассемблере
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788399
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tactical Nuclear Penguin,

Да pointer ^^^ Я знаю это. Но от них не избавится через обычный код
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788449
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых тут вообще не нужен ассемблер.

Во вторых, чем отличается x := p^ от x := p^^ ?

В третьих, чем отличается

x := p;
x^ := n;

от

x := p^;
x := n;

?
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788451
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
впрочем, баги в Дельфи-ассемблере бывают совершенно великолепный, вплоть до компиляции кода прямо противоположного написанному.
Но это не тот случай.
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788469
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Foxpc,

лучше не парься, объяви static функцию, как советует X-Cite, и в ней вызывай свой метод, проиграешь чуток на вызове, но кучу проблем избежишь

и с полиморфом, как советует ziv-2014, возиться не советую, очень уж неровно к ним антивирусы относятся, да и на 64-битном коде особого выигрыша они не дают, зато проблем создают ещё больше
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788498
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)проиграешь чуток на вызове

с хрена ли? это обычная глобальная функция, только с переменной Self (которая всё равно константа)
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788506
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)и с полиморфом, как советует ziv-2014, возиться не советую

нет там никакого полиморфа, обычное создание функции-заглушки на лету
тот же вызов DLL, только сложнее.

Это всё тот же старый вопрос:

Ariochа это в зависимости от 21836382

AriochНу так этот интерфейс, он в момент времени один единственный, или их может быть одновременно много?

Если несколько - то одной глобальной переменной не хватит, и придётся плодить функции.
Если один - то просто классовый статический метод.
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788584
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochkealon(Ruslan)проиграешь чуток на вызове

с хрена ли? это обычная глобальная функция, только с переменной Self (которая всё равно константа)static метод без потайного параметра, указывающего на класс
в вызове потеряешь если нужно выйти с него на нормальный объект


Ariochkealon(Ruslan)и с полиморфом, как советует ziv-2014, возиться не советую

нет там никакого полиморфа, обычное создание функции-заглушки на лету
тот же вызов DLL, только сложнее.
смотри внимательно

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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;        }
  {----------------------------}


выделение места в куче под код и называется полиморфом
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788618
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тут типа что то подобное.. Но НАДО разбираться в этой помойке

https://github.com/pyscripter/python4delphi/blob/e6607599147084a61dc832413867826ea43f0aab/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788635
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxpcТут типа что то подобное.. Но НАДО разбираться в этой помойке

https://github.com/pyscripter/python4delphi/blob/e6607599147084a61dc832413867826ea43f0aab/PythonForDelphi/Components/Sources/Core/MethodCallBack.pas тоже самое, просто чуть более ленивый программист
зачем это для питона, где и так есть способы передать указатель, тоже непонятно
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788656
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)в вызове потеряешь если нужно выйти с него на нормальный объект

а зачем "выходить на нормальный объект", если объект всего лишь один (или вообще ноль) и лежит в глобальной переменной?

kealon(Ruslan)выделение места в куче под код и называется полиморфом

Нет, полиморфом называется изменение кода программы, чтобы все команды были другими, а результат их выполнения - тот же самый. Поли-морф, много разных кодов для одного и того же результата. Изначально (MtE, Mutation engine) это вообще было бинарной перекомпиляцией ЕМНИП.

Создание нового кода программы, хоть в куче, хоть где - рядовое дело.
Например Delphi ваш код компилирует.
Например LoadLibrary грузит DLL, у которой статическая линковка зависимых DLL
Например VirtualDub создаёт дерево фильтров для копирования видео с обработкой.

Надо ещё на всякие мульти-ивенты в spring4D внимательно посмотреть
На TVirtualMethodInterceptor из Delphi XE
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788658
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, антивирусы иногда и на банальный FPC RTL стойку делают.

А на запрос отвечают "ну нам так проще, все равно нормальных программ на этом языке не пишут, так что не жалко"
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788666
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arioch,

через годик - два и на простой компилятор delphi будут антивирусы орать
я видел билдеры которые используют чистый компилятор delphi (15 мб размером) для злых умыслов.
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788711
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

FoxpcЕщё одно решение

Код: pascal
1.
2.
3.
  asm
    mov [self], offset Enigne
  end;



Но без ассемблера через код, никак такое не удалось сделать.

pointer( Self ) := @Form1;

С уважением, Polesov.
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788713
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesovpointer( Self ) := @Form1;
pointer( Self ) := @Enigne;

Копи/паст, блин )
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788715
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochkealon(Ruslan)в вызове потеряешь если нужно выйти с него на нормальный объект

а зачем "выходить на нормальный объект", если объект всего лишь один (или вообще ноль) и лежит в глобальной переменной?

kealon(Ruslan)выделение места в куче под код и называется полиморфом

Нет, полиморфом называется изменение кода программы, чтобы все команды были другими, а результат их выполнения - тот же самый. Поли-морф, много разных кодов для одного и того же результата. Изначально (MtE, Mutation engine) это вообще было бинарной перекомпиляцией ЕМНИП.

Создание нового кода программы, хоть в куче, хоть где - рядовое дело.
Например Delphi ваш код компилирует.
Например LoadLibrary грузит DLL, у которой статическая линковка зависимых DLL
Например VirtualDub создаёт дерево фильтров для копирования видео с обработкой.

Надо ещё на всякие мульти-ивенты в spring4D внимательно посмотреть
На TVirtualMethodInterceptor из Delphi XE
загрузчик dll рассматривать как полиморф смысла нет, ибо это часть системы, а свои всегда ровнее

под "выделением места в куче под код" подразумевается естественно и выставление ему флагов на запуск PAGE_EXECUTE и исполнение, а не компиляция

TVirtualMethodInterceptor можешь не копать, нет там полиморфного кода

ну а насчёт рядового дела, неизвестные "загрузчики-распаковщики" вызывают дикие позывы у антивирусов


Полиморф - это любая программа, которая модифицирует свой код(если я дорисую к подписи чёрточки это же модификация? так?), а как она это делает выделяет ли на куче или в кодовом блоке правит не особо важно. Очень так живенько с VCL весь полиморфный код выпиливали.


по сабжу, тынц - довольно старая статья, показывающая как раньше это было круто, и там же длинный ряд комментов
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788722
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey1. Анонимки это интерфейсы.
2. Поля не для параметров, а для контекста (закомментировать 1, раскомментировать 2)
1. Под капотом создается TInterfacedObject
2. Интерфейс не способен захватить контекст и нужен только для соглашения вызова в Invoke
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788730
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

И без уточнений понятно, что за интерфейсом всегда стоит реализация. Оперируя анонимкой - оперируешь интерфейсом, в этом была суть вопроса. А уж какими средствами он реализуется - дело десятое.
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788732
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,
Абсолютно согласен. Только изначальный мой пост был для желающего передать анонимку к сишную процедуру. Я хотел уточнить, что это в итоге выльется в вызов метода наследника со всеми вытекающими.
А так понятно что интерфейсы юзаются для чистоты и чтоб в итоге очистить объект, реализующий анонимку.
...
Рейтинг: 0 / 0
Передача аннонимной функции в cи библиотеку
    #39788790
ziv-2014
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerKazantsev Alexey1. Анонимки это интерфейсы.
2. Поля не для параметров, а для контекста (закомментировать 1, раскомментировать 2)
1. Под капотом создается TInterfacedObject
2. Интерфейс не способен захватить контекст и нужен только для соглашения вызова в Invoke
Способен, потому что в зависимости от контекста, этот интерфейс для анонимной процедуры будет разным, а именно там будут поля для переменных контекста.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача аннонимной функции в cи библиотеку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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