关于变速齿轮的问题.

YUGIBALSA 2003-06-29 06:01:48
最近要做一个项目,要用到变速齿轮那样的功能,我知道网上有相关的源程,但都是C的,我只会VB与DELPHI,谁有译过来的程序,麻烦发到YUGIBALSA@HOTMAIL.COM,分不够可另给,最多250
...全文
88 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
武稀松 2003-07-02
  • 打赏
  • 举报
回复
不过是APIHook罢了。拦截GetTickCount等几个API,把时间调快一点
YUGIBALSA 2003-07-01
  • 打赏
  • 举报
回复
自己再UP一UP
YUGIBALSA 2003-07-01
  • 打赏
  • 举报
回复
API陷阱是不是API HOOK,这个我有点认识,至于大家说要用汇编,我认为应该没这么麻烦,我对汇编不太感冒我想控制的不是系统底层,而只是随便一个知道句柄的控件,我同意楼上的说法,因为我会用SETTIME和KILLTIME来控制软件时间的减慢,现在的问题是加快,最多加快两倍就够,我又想过用TTHREAD,不知是不是???
huoxingdi03 2003-06-30
  • 打赏
  • 举报
回复
我看过一遍关于《变速齿轮》的文章,变速齿轮其实并不是修改8253控制器,这个方法比较麻烦(特别是在NT下),并且所有的软件都会影响,它是采用API陷阱技术,对时间API实现拦截修改它的返回值,这样它可以对定点的软件进行控制并且不影响其他的软件。
yansea 2003-06-30
  • 打赏
  • 举报
回复
CSDN上有关于齿轮的讨论,找找看
naughtyboy 2003-06-30
  • 打赏
  • 举报
回复
呵呵
这个属于系统的底层操作了
不知道你想要9x下的还是nt/2000下的?
nbforyou 2003-06-29
  • 打赏
  • 举报
回复
新鲜呀
czp 2003-06-29
  • 打赏
  • 举报
回复
Mark
纯冰糖 2003-06-29
  • 打赏
  • 举报
回复
同意ehom(?!) ,c可是基础啊,楼上的代码我收了看看
grail_ 2003-06-29
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

type
TForm1 = class(TForm)
TrackBar1: TTrackBar;
procedure TrackBar1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure SetRing(value:word); stdcall;
const ZDH = $03; // 设一个中断号
var
IDT : array [0..5] of byte; // 保存IDT表
OG : dword; //存放旧向量
begin
asm
push ebx
sidt IDT //读入中断描述符表
mov ebx, dword ptr [IDT+2] //IDT表基地址
add ebx, 8*ZDH //计算中断在中断描述符表中的位置
cli //关中断
mov dx, word ptr [ebx+6]
shl edx, 16d
mov dx, word ptr [ebx]
mov [OG], edx
mov eax, offset @@Ring0 //指向Ring0级代码段
mov word ptr [ebx], ax //低16位,保存在1,2位
shr eax, 16d
mov word ptr [ebx+6], ax //高16位,保存在6,7位
int ZDH //中断
mov ebx, dword ptr [IDT+2] //重新定位
add ebx, 8*ZDH
mov edx, [OG]
mov word ptr [ebx], dx
shr edx, 16d
mov word ptr [ebx+6], dx //恢复被改了的向量
pop ebx
jmp @@exitasm //到exitasm处
@@Ring0: //Ring0,这个也是最最最核心的东东
mov al,$34 //写入8253控制寄存器
out $43,al
mov ax,value
// mov al,value //写入定时值
out $40,al //写定时值低位
mov al,ah
out $40,al //写定时值高位
iretd //返回
@@exitasm:
end;
end;


procedure TForm1.TrackBar1Change(Sender: TObject);
begin
SetRing(strtoint('$'+inttostr(1742+(10-trackbar1.Position)*160)));


end;


end.
grail_ 2003-06-29
  • 打赏
  • 举报
回复
我有DELPHI的代码
hansion3406 2003-06-29
  • 打赏
  • 举报
回复
不会..
ehom 2003-06-29
  • 打赏
  • 举报
回复
分9X和NT两种处理办法~~~

9X下先需要进入Ring0层执行

不会?找段CIH病毒的源代码看看,用用搜索引擎找到一大堆
http://www.delfan.com/language/delphi/self/ring0.html

进入Ring0层后,核心代码就几句
cli ;关中断
mov al,34h
out 43h,al ;写入8253控制寄存器
mov ax,value ;value默认为1742H
out 40h,al ;写定时值低位
mov al,ah
out 40h,al ;写定时值高位
sti ;开中断
iretd ;中断返回

//一般大学的汇编教材上都有这类基础知识

在NT/2000/XP下进入Ring0层比较困难
http://www.pcvc.net/category/content.asp?sendid=139

一般可使用一些现成的设备驱动写I/O端口

另外,像掌握C这种基础语言应该是必须的
Eastunfail 2003-06-29
  • 打赏
  • 举报
回复
注:不长的概念是少于700行
Eastunfail 2003-06-29
  • 打赏
  • 举报
回复
你把源代码贴给我,如果核心代码不长我可以帮你翻译

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧