解决方案 »
- timer计时能否暂停啊
- 高分请求三角形的第三点坐标。已知两点做标和一条边的长,
- API HOOK delphi转C++
- 工资管理系统源代码
- Dephi中有不有类似于Java中的Collection类,可以放任何对象?
- 如何让DBGrid 有全选功能??
- 找个深度/广度优先搜索的例子
- 紧急问题,关于菜单啊!应该很简单的,但就是有问题!(快捷键和热键)
- 数据表某字段的值只有两种可能,怎样实现显示值与数据库值不同。如:值为“1”,显示为“男”。
- 用D5中的QUICKREP做的打印程序出错:本是两张却打出了七张,谁有办法??
- delphi 怎么获取他人程序的菜单按钮句柄。
- 关于迅雷云加速Delphi版,任务创建成功,但是实际没有启动下载,请各位帮看下
但是Delphi还是支持的,但是和之前有点区别.就是如果内嵌汇编就要整个函数都用会编写.比如:
procedure test;
asm
.......
end;
http://www.raysoftware.cn/?p=493
支持X86,X64的各种Hook,.而且使用很简单
push OutputBufferLength //XE4 64位编译这里报错,需要另外写一个方法,不知道怎么写
push OutputBuffer
push InputBufferLength
push InputBuffer
push IoControlCode
push IoStatusBlock
push ApcContext
push ApcRoutine
push Event
push FileHandle
call OldNtDeviceIoControl
mov Result, eax
end;这就是一个标准的API调用,可以不使用汇编的,先定义这个函数的格式,把OldNtDeviceIoControl强转类型到函数类型,即可调用
TNtDeviceIoControlFileFun = function(
FileHandle: THANDLE;
Event: THANDLE;
ApcRoutine: PIO_APC_ROUTINE;
ApcContext: PVOID;
IoStatusBlock: PIO_STATUS_BLOCK;
IoControlCode: ULONG;
InputBuffer: PVOID;
InputBufferLength: ULONG;
OutputBuffer: PVOID;
OutputBufferLength: ULONG
): NTSTATUS; stdcall;
function NewNtDeviceIoControlFile(
FileHandle: THANDLE;
Event: THANDLE;
ApcRoutine: PIO_APC_ROUTINE;
ApcContext: PVOID;
IoStatusBlock: PIO_STATUS_BLOCK;
IoControlCode: ULONG;
InputBuffer: PVOID;
InputBufferLength: ULONG;
OutputBuffer: PVOID;
OutputBufferLength: ULONG
): NTSTATUS; stdcall;
var
AfdInfo: PAFD_INFO;
Buffer: PAnsiChar;
Len: DWORD;
tmpStr: string;
Index: Integer;
begin
// 先调用原始函数
Result := TNtDeviceIoControlFileFun(OldNtDeviceIoControl)(
FileHandle,
Event,
ApcRoutine,
ApcContext,
IoStatusBlock,
IoControlCode,
InputBuffer,
InputBufferLength,
OutputBuffer,
OutputBufferLength);
// 如果原始函数失败了(例如RECV无数据)
if (not NT_SUCCESS(Result)) then
begin
Exit;
end;
....另:别被3楼的话吓到了,32位和64位可以用编译关键字区分的
如:
function Test : Boolean;
{$IFDEF CPUARM}
begin
//Android,iOS等ARM编码写于此
Result := False;
end;
{$ELSE}
asm
{$IFDEF CPUX64}
XOR RAX , RAX
{$ELSE} //CPUX86
XOR EAX , EAX
{$ENDIF}
end;
{$ENDIF}