如何用delphi执行一段机器码指令? 机器码指令保存于变量中。 要求同时可以传递参数和接收参数。 请问如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TForm1.Button1Click(Sender: TObject);type MyFuncType = function (x, y: Integer): Integer;const code: PChar = #$03#$D0#$8B#$C2#$C3#$F7#$EA#$C3;// 此code所指的机器码包括两个函数,// 第一个函数实现两个整数的加法// 第二个函数实现两个整数的乘法var fp: Pointer; f1, f2: MyFuncType; res1, res2: Integer;begin fp := VirtualAlloc(nil, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE); Move(code^, fp^, 8); f1 := fp; f2 := Pointer(Integer(fp) + 5); res1 := f1(10, 20); ShowMessage(IntToStr(Res1)); res2 := f2(10, 20); ShowMessage(INtToStr(Res2)); VirtualFree(fp, 0, MEM_RELEASE);end; 内联汇编好了啊。asmend; 内联汇编好了啊。asmend; 二楼spirit_sheng(老盛)的代码有效。只是只能输入2个参数分别到eax和edx中,如果需要输入多个参数,应该如何实现呢? 多个参数用stdcall接口规范,var Fun : Pointer; 参数一 P1, P2 , P3 ...... fResult : integer;begin Fun := you function address asm PUSH Pn; ... PUSH p2; PUSH P1; Call Fun; MOV fResult , EAX; //返回值 end; 以前trubo pascal 有个inline关键字,专门用来执行机器指令的,不知道delphi下还能不能用 报表问题!!!!!!!!! 导入Excel模板信息进行数据填充问题 自动跳转到别的窗体 请问Access Driver参数不足是什么错误,急! 学历与能力,谁主沉浮? 关于DBF数据库记录删除、增加、修改、查找的问题 有活人没有?急死了!!!解决有高分 求助关于midas 好消息。。。Delphi 6 Developer's Guide 通用数据控件如何实现? 求一取文件版本函数 气泡提示
type MyFuncType = function (x, y: Integer): Integer;
const code: PChar = #$03#$D0#$8B#$C2#$C3#$F7#$EA#$C3;
// 此code所指的机器码包括两个函数,
// 第一个函数实现两个整数的加法
// 第二个函数实现两个整数的乘法
var
fp: Pointer;
f1, f2: MyFuncType;
res1, res2: Integer;
begin
fp := VirtualAlloc(nil, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Move(code^, fp^, 8);
f1 := fp;
f2 := Pointer(Integer(fp) + 5);
res1 := f1(10, 20);
ShowMessage(IntToStr(Res1));
res2 := f2(10, 20);
ShowMessage(INtToStr(Res2));
VirtualFree(fp, 0, MEM_RELEASE);
end;
asm
end;
asm
end;
只是只能输入2个参数分别到eax和edx中,如果需要输入多个参数,应该如何实现呢?
var
Fun : Pointer;
参数一 P1, P2 , P3 ......
fResult : integer;
begin
Fun := you function address
asm
PUSH Pn;
...
PUSH p2;
PUSH P1;
Call Fun;
MOV fResult , EAX; //返回值
end;