小编Vic*_*elo的帖子

Delphi - 用函数编写.pas库

我正在使用Assembly在Delphi中编写一些函数.所以我想把它放在一个名为的.pas文件中Strings.pas.用于uses新的Delphi软件.我需要写什么才能使它成为一个有效的库?
我的功能是这样的:

function Strlen(texto : string) : integer;
begin
  asm
    mov esi, texto
    xor ecx,ecx
    cld
    @here:
    inc ecx
    lodsb
    cmp al,0
    jne @here
    dec ecx
    mov Result,ecx
  end;
end;
Run Code Online (Sandbox Code Playgroud)

这会计算字符串中字符的数量.如何在lib中创建它Strings.pasuses Strings;在我的表单中调用?

delphi assembly function

1
推荐指数
1
解决办法
962
查看次数

Delphi - 在Int64中加入2个整数

我正在Delphi和我一起工作Assembly,所以,我有一个问题.我使用的指令(RDTSC在大会得到一个64位读时间戳的),则该指令把数字分别在两个寄存器EAXEDX.但没关系,我用Delphi Integer变量得到它.但现在,我需要将这些变量加入64位中的1位.就像是:

Var1 = 46523
var2 = 1236
Run Code Online (Sandbox Code Playgroud)

所以我需要将它放入一个变量,如:

Var3 = 465231236
Run Code Online (Sandbox Code Playgroud)

它就像一个StrCat,但我不知道该怎么做.有人可以帮帮我吗?

delphi assembly strcat rdtsc

0
推荐指数
2
解决办法
1029
查看次数

Delphi - 尝试使用DLL注入覆盖指令时发生访问冲突

早上好.我正在尝试学习DLL注入,所以我写了一个小软件,它只获取一个String,与StrCmp()进行比较,如果输入等于"Winner",则该软件会给出一个好男孩消息,学习DLL注入的porpouse.所以我写了一个DLL,它在注入时加载一个Form,porpouse正在使用DLL注入,修改比较指令(JNZ(74)到JMP(EB)),然后制作软件,接受任何字符串.我的DLL代码是:

library Project2;
uses
  SysUtils,
  Windows,
  Classes,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
var
Hproccess:THandle;
Hid:Cardinal;
b:Boolean=false;

       Procedure Chamar;
       begin
        Form1:=TForm1.Create(nil);
       Form1.ShowModal;
       end;
begin
Hproccess:=OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID);
CreateRemoteThread(Hproccess,nil,0,@Chamar,@Chamar,0,Hid);
end.
Run Code Online (Sandbox Code Playgroud)

你怎么看,DLL只是创建一个新的线程来加载窗体(Form1).问题是,当我在Memory Addres中写入以覆盖JNZ指令时,Windows不允许我这样做,并在地址005B55A9返回访问冲突消息.我的表单代码也很简单.

    unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button2: TButton;
    procedure Button2Click(Sender: TObject);

  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
Memory:Dword;
begin
Memory:=$005B55A9;
PDWORD(Memory)^:=225; {EB=225}
Free();
end;
end.
Run Code Online (Sandbox Code Playgroud)

我做错了什么?如何在没有访问冲突错误的情况下将JNZ(74)的指令覆盖到JMP(EB)?对不起我的错误,我昨天开始阅读它,这是我的第一个例子.我已经有了Injector(极端注射器).我的疑问只是关于DLL编码.你能帮助我吗?

我忘了说,我使用的是Windows 10 ...

memory delphi dll access-violation dll-injection

0
推荐指数
1
解决办法
299
查看次数