delphi - 如何获取编译时已知的汇编指令的机器代码?

标签 delphi assembly shellcode basm

我希望能够将一行 ASM 转换为 shellcode。即:

CALL EBX

我该如何做到这一点,并且能够正确转换此 shellcode,以便我可以将其存储在 delphi 应用程序中的变量中。即:

var ShellCodeArray:  array[0..3] of Byte = ($55,$8B,$EC,$81);

最佳答案

如果我没理解错的话,您想使用 Delphi 内置汇编器获取单个汇编器指令 CALL EBX 的机器码。

function CodeSize: Integer;
asm
    lea EAX, @@end
    lea EDX, @@start
    sub EAX, EDX
    JMP @@end
@@start:
    call EBX
@@end:
end;

procedure Code;
asm
    call EBX
end;

function CodeToBytes: TBytes;
var
  I, N: Integer;
  P: PByte;

begin
  N:= CodeSize;
  SetLength(Result, N);
  P:= @Code;
  for I:= 0 to N - 1 do begin
    Result[I]:= P^;
    Inc(P);
  end;
end;

关于delphi - 如何获取编译时已知的汇编指令的机器代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275948/

相关文章:

arrays - 如何查看已初始化数组与未初始化数组占用的内存

android - 我如何让我的代码正确地从零开始工作?

delphi - Delphi 中的 Windows 7 风格通知弹出窗口

caching - SFENCE和LFENCE对相邻核心的缓存有什么影响?

assembly - 汇编跳转后比较标志是否被清除?

linux - 端口绑定(bind) shellcode 中的段错误

delphi - delphi 如何在跟踪模式下从特定行找到调用者?

delphi - 从 Delphi VCL 样式获取特定字形

c - 助记符中的无效字符 '\'

linux - 如何将 shellcode 解码为 ascii