初步了解tgs插件的写法(二) 上面部分已经初步了解色彩设定的方式, 这个时候为了增加我们自定义色彩显示, 就需要在
dll里面进行内存地址读写
我是在
0053BBFF |. /0F87 41020000 ja 0053BE46
在这个地址进行拦截 在delphi里面 可能可以dll初始化时这样写
procedure InitDll();
var
p: Dword;
begin
p := $0053BBFF + 1;
PDword(p)^ := Dword(@proc_0053BBFF);
end;
在自己的代码里面写一个色彩增加的函数判断比如
delphi代码:
var
EndAddr1_0053BBFF : Dword = $004F470C;
EndAddr2_0053BBFF : Dword = $004F44CB;
EndAddr3_0053BBFF : Dword = $004F4736; //色彩彩赋值结束跳转
CallAddr1_0053BBFF : Dword = $004611D4;
CallAddr2_0053BBFF : Dword = $004611D4;
procedure proc_0053BBFF();
asm
cmp eax, $10 //与预先设定的 最大17比较
JLE @OldCor //小于就跳转到默认16种色彩赋值
cmp eax, $10 //比较是否等于16
jnz @Seventh //不等于就跳转到第17种色彩判断部分
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
mov ax, $A
call CallAddr1_0053BBFF
mov edx, dword ptr [ebp-$14]
mov word ptr [edx+1], ax
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
mov ax, $10
call CallAddr2_0053BBFF
mov edx, dword ptr [ebp-$14]
mov word ptr [edx+3], ax
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
@Seventh:
cmp eax, $11 //比较是否等于17
jnz @out //不等于就跳转到默认部分
mov cx, $A //字色或背景色? 没有去详细了解请自己测试
mov dx, $A // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
mov ax, $A
call CallAddr1_0053BBFF
mov edx, dword ptr [ebp-$14]
mov word ptr [edx+1], ax
mov cx, $10 //字色或背景色? 没有去详细了解请自己测试
mov dx, $10 // 可以通过修改赋值给ax, cx, dx的值 不超过$FF
mov ax, $10
call CallAddr2_0053BBFF
mov edx, dword ptr [ebp-$14]
mov word ptr [edx+3], ax
jmp EndAddr3_0053BBFF //色彩赋值结束跳转到tgs
//
@out:
jmp EndAddr1_0053BBFF //这个是跳转到默认的点
@OldCor:
jmp EndAddr2_0053BBFF // 跳转到原来16种色彩赋值
end
|