Delphi заставить добавить в DIRECTORY_ENTRY_IMPORT
От: sanx  
Дата: 20.09.16 17:54
Оценка:
Как принудительно добавить запись в таблицу импорта при компиляции в Delphi. Импортируемая функция не используется, но нужна в DIRECTORY_ENTRY_IMPORT.
Например, если объявить:

function TlsAlloc: DWORD; stdcall; external 'kernel32.dll';

Но не вызывать функцию, то компилятор не добавить запись в таблицу импорта. А возможно ли указать ему это сделать принудительно?
Re: Delphi заставить добавить в DIRECTORY_ENTRY_IMPORT
От: BlackEric http://black-eric.lj.ru
Дата: 21.09.16 09:09
Оценка:
Здравствуйте, sanx, Вы писали:

S>Как принудительно добавить запись в таблицу импорта при компиляции в Delphi. Импортируемая функция не используется, но нужна в DIRECTORY_ENTRY_IMPORT.

S>Например, если объявить:

S>function TlsAlloc: DWORD; stdcall; external 'kernel32.dll';


S>Но не вызывать функцию, то компилятор не добавить запись в таблицу импорта. А возможно ли указать ему это сделать принудительно?


Зачем в импорте неиспользуемая функция?
Версия делфи какая?
https://github.com/BlackEric001
Re[2]: Delphi заставить добавить в DIRECTORY_ENTRY_IMPORT
От: sanx  
Дата: 22.09.16 04:15
Оценка:
Зачем это? Хочу зафлудить список импорта )

Сделал так:

unit ForceMyImports;

interface

implementation

uses
  Windows;

var
  DummyPtr: Pointer;

procedure InitForceMyImports;
begin
  DummyPtr := @TlsAlloc;
end;

initialization

  ForceMyImports;

end.


Проверено на последней версии Delphi Berlin 10.1 — работает.
Так как Делфи почти не оптимизирует не локальные переменные, то получилось таким образом.

Хотелось бы избавиться от кода инициализации. Хотя он и представляет из себя что-то типа mov [xxx], yyy. Думаю если знать формат dcu файлов для конкретной версии Делфи, то можно сформировать импорт в нем. Если конечно у них умный "сборщик" не отбракует не используемый импорт. Может кто подскажет по формату dcu?
Re[3]: Delphi заставить добавить в DIRECTORY_ENTRY_IMPORT
От: Alexander G Украина  
Дата: 06.12.16 14:45
Оценка:
Здравствуйте, sanx, Вы писали:


S>Хотелось бы избавиться от кода инициализации. Хотя он и представляет из себя что-то типа mov [xxx], yyy.


Если цель его не вызвать, то можно ещё добавить косвенности, наверное.

initialization

  DummyPtr = @ForceMyImports;

end.


S>Думаю если знать формат dcu файлов для конкретной версии Делфи, то можно сформировать импорт в нем. Если конечно у них умный "сборщик" не отбракует не используемый импорт. Может кто подскажет по формату dcu?


Уж проще тогда прилинковать .obj через $L, наверное
Русский военный корабль идёт ко дну!
Re: Delphi заставить добавить в DIRECTORY_ENTRY_IMPORT
От: vladimir.romin  
Дата: 06.12.16 15:00
Оценка:
Здравствуйте, sanx, Вы писали:

S>Как принудительно добавить запись в таблицу импорта при компиляции в Delphi. Импортируемая функция не используется, но нужна в DIRECTORY_ENTRY_IMPORT.

S>Например, если объявить:

S>function TlsAlloc: DWORD; stdcall; external 'kernel32.dll';


S>Но не вызывать функцию, то компилятор не добавить запись в таблицу импорта. А возможно ли указать ему это сделать принудительно?


Если в x86 то вот так тоже прокатит:

asm
  jmp @1
  call TlsAlloc
  @1:
end;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.