- This topic has 5 replies, 2 voices, and was last updated 9 years, 10 months ago by Stertor.
-
AuthorPosts
-
January 10, 2015 at 2:37 pm #36414bujin888ParticipantQuote:TEST OS: WIN7 32
use rundll32.exe to load testdll.dll
Mybe if host exe PEheader MajorSubsystemVersion not 0400! this erro will come
modus vivendi:
var
GetSystemMetricsNext:Pointer;
function MyGetSystemMetrics(nIndex: Integer): Integer; stdcall;
type
TGetSystemMetrics=function (nIndex: Integer): Integer; stdcall;
begin
Result:=TGetSystemMetrics(GetSystemMetricsNext)(nIndex);
if (nIndex=7) OR (nIndex=32) then
begin
Result:=Result+5;
end;
end;
procedure HookBorderWidth;
var
PebAddress:DWORD;
ExeBase:DWORD;
PEHeader:PImageNtHeaders;
begin
asm
mov eax, fs:[$30]
mov PebAddress, eax
end;
ExeBase:=PULONG(PebAddress+8)^;
PEHeader:=Pointer(ExeBase+PImageDosHeader(ExeBase)._lfanew);
if PEHeader.OptionalHeader.MajorSubsystemVersion=6 then
begin
HookDelphiFun(@GetSystemMetrics,@MyGetSystemMetrics,GetSystemMetricsNext);
end;
end;
Quote:library testDll;uses
Windows,
Forms,
SysUtils,
Unit1 in 'Unit1.pas' {Form1};
exports
s;
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
run:
Quote:C:WindowsSystem32rundll32.exe testdll.dll,sbut
January 14, 2015 at 2:49 pm #52997StertorParticipantПривет, я вообще не вижу здесь код 😐 То, что Вы написали – грязный хак.
Вы можете подробно объяснить, что Вы хотите сделать?
January 14, 2015 at 3:19 pm #52998bujin888Participant'Stertor' wrote:Привет, я вообще не вижу здесь код 😐 То, что Вы написали – грязный хак.
Вы можете подробно объяснить, что Вы хотите сделать?
if the executable program PEheader.MajorSubsystemVersion not 0x0400, alphaskins will make mistakes
January 14, 2015 at 9:03 pm #53000StertorParticipantВыглядит так, что ошибка не в alphaskins.
Вы пытаетесь создавать *.dll как обычное приложение с формой – это неправильно:
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
use only TForm.showmodal:
Code:library Project1;uses
//fastmm4,fastmm4messages,
SysUtils,
Classes,
Unit1 in 'Unit1.pas' {Form1};{$R *.res}
procedure test;stdcall; //rundll32 project1.dll,test
var
Form:TForm1;
begin
Form:=TForm1.Create(nil);
Form.ShowModal;
Form.destroy;
end;exports test;
begin
end.January 18, 2015 at 5:34 pm #53019bujin888Participantif your DLL Working in WIN7 or WIN8 OS,And The host process is C:WindowsSystem32rundll32.exe,You will understand that I mean expression.
You write the DLL DEMO,Loading in the following ways In win7,Error also occurs!
Quote:C:WindowsSystem32rundll32.exe C:Project.dll,testIf your host process is compiled by Delphi so there won't be a mistake,But if you host process is compiled by VC++ or other,
and PEheader.MajorSubsystemVersion not 0x0400 ,Error will occur!In this way, we write DLL there is no way to call by the VC++ host process !
January 19, 2015 at 10:52 pm #53022StertorParticipantУважаемый bujin888! Мы не успели пообщаться долго – я не могу знать,насколько хорошо Вы знаете Delphi. Дело вовсе не в dll и host; нет существенной разницы, написан ли host на delphi или ином языке. На данный момент у меня установлена Delphi 7 и я не заметил никаких сбоев или других ошибок при тестировании моих примеров как в XP, так и в WIN 7.
dll скомпилированные в Делфи совместимы со всеми программами, при условии что Вы используете в параметрах функций и процедур только
pchar, integer, pointer. Вместе с тем Вы отказались привести полный код Вашего проекта, поэтому я не могу с точностью сказать в чем именно Ваша ошибка. Могу только предполагать, что Вы – тролль, который хочет в бан. Удачи в Ваших изысканиях. 🙄
-
AuthorPosts
- You must be logged in to reply to this topic.