fix
This commit is contained in:
Submodule FasmOnDelphi updated: cd49f90470...62a5d170ba
@@ -2,7 +2,9 @@ unit RuntimeBuilder.Fasm;
|
|||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses RuntimeBuilder.Types,FasmOnDelphi,System.TypInfo,System.Rtti,winapi.windows;
|
uses
|
||||||
|
System.Classes,System.TypInfo,System.IOUtils,System.Rtti,Winapi.Windows,
|
||||||
|
RuntimeBuilder,FasmOnDelphi;
|
||||||
|
|
||||||
type
|
type
|
||||||
TRTBFasmCompiler=class(TRTBCompiler)
|
TRTBFasmCompiler=class(TRTBCompiler)
|
||||||
@@ -18,19 +20,20 @@ type
|
|||||||
function Call(OutType:PTypeInfo;args:TArray<TValue>;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;override;
|
function Call(OutType:PTypeInfo;args:TArray<TValue>;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;override;
|
||||||
destructor Destroy;override;
|
destructor Destroy;override;
|
||||||
end;
|
end;
|
||||||
TRTBLib=class abstract
|
TRTBFasmLib=class(TRTBLib)
|
||||||
private type
|
private type
|
||||||
TRTBFasmLibFunc=class(TRTBFasmFunc)
|
TRTBFasmLibFunc=class(TRTBFasmFunc)
|
||||||
public
|
public
|
||||||
//constructor Create(p:Pointer);
|
constructor Create(p:Pointer);
|
||||||
//destructor Destroy;override;
|
destructor Destroy;override;
|
||||||
end;
|
end;
|
||||||
private
|
private
|
||||||
//function GetFuntion(Name:string):TRTBFunc;virtual;abstract;
|
filename:string;
|
||||||
|
Lib:NativeUInt;
|
||||||
|
function GetFuntion(Name:string):TRTBFunc;override;
|
||||||
public
|
public
|
||||||
constructor Create(p:Pointer;sb:NativeUInt);
|
constructor Create(Name:string);
|
||||||
//property Funtion[Name:string]:TRTBFunc read GetFuntion;
|
destructor Destroy;override;
|
||||||
//destructor Destroy;override;
|
|
||||||
end;
|
end;
|
||||||
protected
|
protected
|
||||||
FText:string;
|
FText:string;
|
||||||
@@ -39,13 +42,16 @@ type
|
|||||||
public
|
public
|
||||||
constructor Create(Compiler:TRTBFasmCompiler);
|
constructor Create(Compiler:TRTBFasmCompiler);
|
||||||
function CompilateAsFunc:TRTBFunc;override;
|
function CompilateAsFunc:TRTBFunc;override;
|
||||||
function CompilateAsLib:TRTBLib;virtual;abstract;
|
function CompilateAsLib:TRTBLib;override;
|
||||||
end;
|
end;
|
||||||
|
protected
|
||||||
|
function GetIncLibs():string;
|
||||||
public
|
public
|
||||||
CompilerMem:NativeUInt;
|
CompilerMem:NativeUInt;
|
||||||
MaxSteps:word;
|
MaxSteps:word;
|
||||||
|
libs:TStringList;
|
||||||
constructor Create(FasmPath:String=FasmPath;AsDll:boolean=false);
|
constructor Create(FasmPath:String=FasmPath;AsDll:boolean=false);
|
||||||
//function LoadLib(Name:string):TRTBLib;
|
function LoadLib(Name:string):TRTBLib;
|
||||||
function GenNewSrc():TRTBSource;override;
|
function GenNewSrc():TRTBSource;override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -85,9 +91,30 @@ VirtualFree(p,sb,MEM_RELEASE);
|
|||||||
p:=nil;
|
p:=nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TRTBFasmCompiler.TRTBFasmSource.TRTBLib.Create(p:Pointer;sb:NativeUInt);
|
constructor TRTBFasmCompiler.TRTBFasmSource.TRTBFasmLib.TRTBFasmLibFunc.Create(p:Pointer);
|
||||||
begin
|
begin
|
||||||
|
Self.p:=p;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TRTBFasmCompiler.TRTBFasmSource.TRTBFasmLib.TRTBFasmLibFunc.Destroy;
|
||||||
|
begin
|
||||||
|
p:=nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRTBFasmCompiler.TRTBFasmSource.TRTBFasmLib.GetFuntion(Name:string):TRTBFunc;
|
||||||
|
begin
|
||||||
|
Result:=TRTBFasmLibFunc.Create(GetProcAddress(Lib,pwidechar(Name)));
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TRTBFasmCompiler.TRTBFasmSource.TRTBFasmLib.Create(Name:string);
|
||||||
|
begin
|
||||||
|
filename:=Name;
|
||||||
|
Lib:=LoadLibrary(pwidechar(Name));
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TRTBFasmCompiler.TRTBFasmSource.TRTBFasmLib.Destroy;
|
||||||
|
begin
|
||||||
|
FreeLibrary(Lib);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TRTBFasmCompiler.TRTBFasmSource.GetText:string;
|
function TRTBFasmCompiler.TRTBFasmSource.GetText:string;
|
||||||
@@ -110,17 +137,46 @@ function TRTBFasmCompiler.TRTBFasmSource.CompilateAsFunc:TRTBFunc;
|
|||||||
var
|
var
|
||||||
Res:TFasmResult;
|
Res:TFasmResult;
|
||||||
begin
|
begin
|
||||||
Res:=FasmAssemble(Text,(Compiler as TRTBFasmCompiler).CompilerMem,(Compiler as TRTBFasmCompiler).MaxSteps);
|
Res:=FasmAssemble(Text+(Compiler as TRTBFasmCompiler).GetIncLibs,(Compiler as TRTBFasmCompiler).CompilerMem,(Compiler as TRTBFasmCompiler).MaxSteps);
|
||||||
if Res.Error<>FASM_OK then
|
if Res.Error<>FASM_OK then
|
||||||
raise Exception.Create(Res.OutStr);
|
raise Exception.Create(Res.OutStr);
|
||||||
Result:=TRTBFasmFunc.Create(Res.OutData,Res.sb);
|
Result:=TRTBFasmFunc.Create(Res.OutData,Res.sb);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TRTBFasmCompiler.TRTBFasmSource.CompilateAsLib:TRTBLib;
|
||||||
|
var
|
||||||
|
templib:string;
|
||||||
|
Res:TFasmResult;
|
||||||
|
begin
|
||||||
|
templib:=TPath.GetTempFileName;
|
||||||
|
Res:=FasmAssembleToFile({$IFDEF CPUX64}'format PE64 DLL'{$ELSE}'format PE DLL'{$ENDIF}+
|
||||||
|
(Compiler as TRTBFasmCompiler).GetIncLibs+sLineBreak+Text,templib,
|
||||||
|
(Compiler as TRTBFasmCompiler).CompilerMem,(Compiler as TRTBFasmCompiler).MaxSteps);
|
||||||
|
if Res.Error<>FASM_OK then
|
||||||
|
raise Exception.Create(Res.OutStr);
|
||||||
|
Result:=TRTBFasmLib.Create(templib);
|
||||||
|
end;
|
||||||
|
|
||||||
constructor TRTBFasmCompiler.Create(FasmPath:String=FasmPath;AsDll:boolean=false);
|
constructor TRTBFasmCompiler.Create(FasmPath:String=FasmPath;AsDll:boolean=false);
|
||||||
begin
|
begin
|
||||||
CompilerMem:=1024*1024*16;
|
CompilerMem:=1024*1024*16;
|
||||||
MaxSteps:=65535;
|
MaxSteps:=65535;
|
||||||
OpenFASM(FasmPath,AsDll);
|
OpenFASM(FasmPath,AsDll);
|
||||||
|
libs:=TStringList.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRTBFasmCompiler.LoadLib(Name:string):TRTBLib;
|
||||||
|
begin
|
||||||
|
libs.Add(Name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRTBFasmCompiler.GetIncLibs():string;
|
||||||
|
var
|
||||||
|
i:integer;
|
||||||
|
begin
|
||||||
|
Result:='';
|
||||||
|
for i:=0 to libs.count-1 do
|
||||||
|
Result:=Result+sLineBreak+'include '+#39+libs.Strings[i]+#39;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TRTBFasmCompiler.GenNewSrc():TRTBSource;
|
function TRTBFasmCompiler.GenNewSrc():TRTBSource;
|
||||||
|
|||||||
@@ -1,84 +0,0 @@
|
|||||||
unit RuntimeBuilder.Types;
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses System.TypInfo,System.Rtti;
|
|
||||||
|
|
||||||
const
|
|
||||||
CRTBCallTypeNil=$0;
|
|
||||||
CRTBCallTypeRegister=$1;
|
|
||||||
CRTBCallTypeStdCall=$2;
|
|
||||||
CRTBCallTypeCdecl=$3;
|
|
||||||
CRTBCallTypePascal=$4;
|
|
||||||
CRTBCallTypeSafeCall=$5;
|
|
||||||
CRTBCallType64Call=$40;
|
|
||||||
CRTBCallTypeDefault=$80;
|
|
||||||
|
|
||||||
type
|
|
||||||
TRTBCompiler=class;
|
|
||||||
|
|
||||||
TRTBCallType=CRTBCallTypeNil..CRTBCallTypeDefault;
|
|
||||||
|
|
||||||
TRTBFunc=class abstract
|
|
||||||
public
|
|
||||||
function Call(OutType:PTypeInfo;args:TArray<TValue>;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;virtual;abstract;
|
|
||||||
end;
|
|
||||||
|
|
||||||
TRTBLib=class abstract
|
|
||||||
protected
|
|
||||||
function GetFuntion(Name:string):TRTBFunc;virtual;abstract;
|
|
||||||
public
|
|
||||||
property Funtion[Name:string]:TRTBFunc read GetFuntion;
|
|
||||||
end;
|
|
||||||
|
|
||||||
TRTBSource=class abstract
|
|
||||||
protected
|
|
||||||
Compiler:TRTBCompiler;
|
|
||||||
function GetText:string;virtual;abstract;
|
|
||||||
procedure SetText(S:string);virtual;abstract;
|
|
||||||
public
|
|
||||||
constructor Create(Compiler:TRTBCompiler);
|
|
||||||
function CompilateAsFunc:TRTBFunc;virtual;abstract;
|
|
||||||
function CompilateAsLib:TRTBLib;virtual;abstract;
|
|
||||||
procedure LoadFromFile(&File:string);
|
|
||||||
procedure SaveToFile(&File:string);
|
|
||||||
property Text:string read GetText write SetText;
|
|
||||||
end;
|
|
||||||
|
|
||||||
TRTBCompiler=class abstract
|
|
||||||
public
|
|
||||||
function LoadLib(Name:string):TRTBLib;virtual;abstract;
|
|
||||||
function GenNewSrc():TRTBSource;virtual;abstract;
|
|
||||||
end;
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
uses
|
|
||||||
System.SysUtils,System.Classes;
|
|
||||||
|
|
||||||
constructor TRTBSource.Create(Compiler:TRTBCompiler);
|
|
||||||
begin
|
|
||||||
Self.Compiler:=Compiler;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TRTBSource.LoadFromFile(&File:string);
|
|
||||||
var
|
|
||||||
Data:TStrings;
|
|
||||||
begin
|
|
||||||
Data:=TStringList.Create;
|
|
||||||
Data.LoadFromFile(&File);
|
|
||||||
Text:=Data.Text;
|
|
||||||
FreeAndNil(Data);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TRTBSource.SaveToFile(&File:string);
|
|
||||||
var
|
|
||||||
Data:TStrings;
|
|
||||||
begin
|
|
||||||
Data:=TStringList.Create;
|
|
||||||
Data.Text:=Text;
|
|
||||||
Data.SaveToFile(&File);
|
|
||||||
FreeAndNil(Data);
|
|
||||||
end;
|
|
||||||
|
|
||||||
end.
|
|
||||||
@@ -2,8 +2,83 @@ unit RuntimeBuilder;
|
|||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
uses RuntimeBuilder.Types;
|
uses System.TypInfo,System.Rtti;
|
||||||
|
|
||||||
|
const
|
||||||
|
CRTBCallTypeNil=$0;
|
||||||
|
CRTBCallTypeRegister=$1;
|
||||||
|
CRTBCallTypeStdCall=$2;
|
||||||
|
CRTBCallTypeCdecl=$3;
|
||||||
|
CRTBCallTypePascal=$4;
|
||||||
|
CRTBCallTypeSafeCall=$5;
|
||||||
|
CRTBCallType64Call=$40;
|
||||||
|
CRTBCallTypeDefault=$80;
|
||||||
|
|
||||||
|
type
|
||||||
|
TRTBCompiler=class;
|
||||||
|
|
||||||
|
TRTBCallType=CRTBCallTypeNil..CRTBCallTypeDefault;
|
||||||
|
|
||||||
|
TRTBFunc=class abstract
|
||||||
|
public
|
||||||
|
function Call(OutType:PTypeInfo;args:TArray<TValue>;CallType:TRTBCallType=CRTBCallTypeDefault):TValue;virtual;abstract;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TRTBLib=class abstract
|
||||||
|
protected
|
||||||
|
function GetFuntion(Name:string):TRTBFunc;virtual;abstract;
|
||||||
|
public
|
||||||
|
property Funtion[Name:string]:TRTBFunc read GetFuntion;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TRTBSource=class abstract
|
||||||
|
protected
|
||||||
|
Compiler:TRTBCompiler;
|
||||||
|
function GetText:string;virtual;abstract;
|
||||||
|
procedure SetText(S:string);virtual;abstract;
|
||||||
|
public
|
||||||
|
constructor Create(Compiler:TRTBCompiler);
|
||||||
|
function CompilateAsFunc:TRTBFunc;virtual;abstract;
|
||||||
|
function CompilateAsLib:TRTBLib;virtual;abstract;
|
||||||
|
procedure LoadFromFile(&File:string);
|
||||||
|
procedure SaveToFile(&File:string);
|
||||||
|
property Text:string read GetText write SetText;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TRTBCompiler=class abstract
|
||||||
|
public
|
||||||
|
function LoadLib(Name:string):TRTBLib;virtual;abstract;
|
||||||
|
function GenNewSrc():TRTBSource;virtual;abstract;
|
||||||
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
System.SysUtils,System.Classes;
|
||||||
|
|
||||||
|
constructor TRTBSource.Create(Compiler:TRTBCompiler);
|
||||||
|
begin
|
||||||
|
Self.Compiler:=Compiler;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRTBSource.LoadFromFile(&File:string);
|
||||||
|
var
|
||||||
|
Data:TStrings;
|
||||||
|
begin
|
||||||
|
Data:=TStringList.Create;
|
||||||
|
Data.LoadFromFile(&File);
|
||||||
|
Text:=Data.Text;
|
||||||
|
FreeAndNil(Data);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TRTBSource.SaveToFile(&File:string);
|
||||||
|
var
|
||||||
|
Data:TStrings;
|
||||||
|
begin
|
||||||
|
Data:=TStringList.Create;
|
||||||
|
Data.Text:=Text;
|
||||||
|
Data.SaveToFile(&File);
|
||||||
|
FreeAndNil(Data);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ uses
|
|||||||
DUnitX.TestFramework,
|
DUnitX.TestFramework,
|
||||||
Unit1 in 'Unit1.pas',
|
Unit1 in 'Unit1.pas',
|
||||||
RuntimeBuilder in '..\Source\RuntimeBuilder.pas',
|
RuntimeBuilder in '..\Source\RuntimeBuilder.pas',
|
||||||
RuntimeBuilder.Types in '..\Source\RuntimeBuilder.Types.pas',
|
|
||||||
RuntimeBuilder.Fasm in '..\Source\RuntimeBuilder.Fasm.pas',
|
RuntimeBuilder.Fasm in '..\Source\RuntimeBuilder.Fasm.pas',
|
||||||
FasmOnDelphi in '..\FasmOnDelphi\Source\FasmOnDelphi.pas',
|
FasmOnDelphi in '..\FasmOnDelphi\Source\FasmOnDelphi.pas',
|
||||||
Fasm4Delphi in '..\FasmOnDelphi\Fasm4Delphi\Source\Fasm4Delphi.pas';
|
Fasm4Delphi in '..\FasmOnDelphi\Fasm4Delphi\Source\Fasm4Delphi.pas';
|
||||||
|
|||||||
@@ -97,7 +97,6 @@
|
|||||||
</DelphiCompile>
|
</DelphiCompile>
|
||||||
<DCCReference Include="Unit1.pas"/>
|
<DCCReference Include="Unit1.pas"/>
|
||||||
<DCCReference Include="..\Source\RuntimeBuilder.pas"/>
|
<DCCReference Include="..\Source\RuntimeBuilder.pas"/>
|
||||||
<DCCReference Include="..\Source\RuntimeBuilder.Types.pas"/>
|
|
||||||
<DCCReference Include="..\Source\RuntimeBuilder.Fasm.pas"/>
|
<DCCReference Include="..\Source\RuntimeBuilder.Fasm.pas"/>
|
||||||
<DCCReference Include="..\FasmOnDelphi\Source\FasmOnDelphi.pas"/>
|
<DCCReference Include="..\FasmOnDelphi\Source\FasmOnDelphi.pas"/>
|
||||||
<DCCReference Include="..\FasmOnDelphi\Fasm4Delphi\Source\Fasm4Delphi.pas"/>
|
<DCCReference Include="..\FasmOnDelphi\Fasm4Delphi\Source\Fasm4Delphi.pas"/>
|
||||||
@@ -457,13 +456,13 @@
|
|||||||
<Operation>1</Operation>
|
<Operation>1</Operation>
|
||||||
</Platform>
|
</Platform>
|
||||||
</DeployClass>
|
</DeployClass>
|
||||||
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
||||||
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
|
||||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||||
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
|
||||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||||
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
|
||||||
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
|
||||||
</Deployment>
|
</Deployment>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform value="OSX32">False</Platform>
|
<Platform value="OSX32">False</Platform>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ unit Unit1;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
System.SysUtils,DUnitX.TestFramework,RuntimeBuilder,RuntimeBuilder.Fasm,RuntimeBuilder.Types;
|
System.SysUtils,DUnitX.TestFramework,RuntimeBuilder,RuntimeBuilder.Fasm;
|
||||||
|
|
||||||
type
|
type
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
@@ -11,6 +11,8 @@ type
|
|||||||
public
|
public
|
||||||
[TestCase]
|
[TestCase]
|
||||||
procedure Test1();
|
procedure Test1();
|
||||||
|
[TestCase]
|
||||||
|
procedure Test2();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@@ -34,6 +36,28 @@ FreeAndNil(Src);
|
|||||||
FreeAndNil(Fasm);
|
FreeAndNil(Fasm);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TRuntimeBuilderTestObject.Test2();
|
||||||
|
var
|
||||||
|
Fasm:TRTBFasmCompiler;
|
||||||
|
Src:TRTBSource;
|
||||||
|
lib:TRTBLib;
|
||||||
|
Func1:TRTBFunc;
|
||||||
|
begin
|
||||||
|
Fasm:=TRTBFasmCompiler.Create('..\..\..\FasmOnDelphi\fasmw172\fasm');
|
||||||
|
Src:=Fasm.GenNewSrc;
|
||||||
|
Src.LoadFromFile('..\..\testlib.fasm');
|
||||||
|
Fasm.LoadLib('W:\RuntimeBuilder\FasmOnDelphi\fasmw172\INCLUDE\win32a.inc');
|
||||||
|
lib:=Src.CompilateAsLib;
|
||||||
|
Func1:=lib.Funtion['MyEcho'];
|
||||||
|
if 234665<>Func1.Call(TypeInfo(integer),[234665],CRTBCallTypeStdCall).AsInteger then
|
||||||
|
begin
|
||||||
|
raise Exception.Create('Error in test2');
|
||||||
|
end;
|
||||||
|
FreeAndNil(Func1);
|
||||||
|
FreeAndNil(Src);
|
||||||
|
FreeAndNil(Fasm);
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
TDUnitX.RegisterTestFixture(TRuntimeBuilderTestObject);
|
TDUnitX.RegisterTestFixture(TRuntimeBuilderTestObject);
|
||||||
end.
|
end.
|
||||||
|
|||||||
29
Tests/testlib.fasm
Normal file
29
Tests/testlib.fasm
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
entry DllEntryPoint
|
||||||
|
|
||||||
|
section '.text' code readable executable
|
||||||
|
|
||||||
|
proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
|
||||||
|
mov eax,TRUE
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
proc MyEcho HWnd
|
||||||
|
mov eax,[HWnd]
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
dd GetLastError
|
||||||
|
|
||||||
|
section '.idata' import data readable writeable
|
||||||
|
|
||||||
|
library kernel,'KERNEL32.DLL'
|
||||||
|
|
||||||
|
import kernel,\
|
||||||
|
GetLastError,'GetLastError'
|
||||||
|
|
||||||
|
section '.edata' export data readable
|
||||||
|
|
||||||
|
export '1.DLL',\
|
||||||
|
MyEcho,'MyEcho'
|
||||||
|
|
||||||
|
section '.reloc' fixups data readable discardable
|
||||||
Reference in New Issue
Block a user