Ba năm sau, tôi nghĩ mình biết đủ để trả lời câu hỏi của riêng mình. :)
Chương trình máy tính thường liên lạc với hạt nhân bằng các hàm được xác định trước được gọi là cuộc gọi hệ thống. Mỗi hệ điều hành có một bộ các cuộc gọi khác nhau nhưng thường thì chúng thực hiện những việc tương tự như - cấp phát bộ nhớ, đọc và ghi các tệp hoặc xử lý các quy trình. Theo số this page, có khoảng 480 cuộc gọi hệ thống trong hạt nhân Windows NT.
Đối với bất kỳ mục đích nào liên quan đến phần cứng, chương trình thường sử dụng các cuộc gọi hệ thống vì đó là hệ điều hành tốt nhất và một trong những điều này xảy ra là biết thời gian. Các trò chơi trên máy tính thường cần hiển thị 60 khung hình/giây và để thực hiện điều này, chúng cần gọi hàm render mỗi 16.6ms. Trên Windows, "GetTickCount()" thường được sử dụng cho điều này trả về số mili giây đã trôi qua kể từ khi Windows được bật lên ("Nếu không có mili giây trôi qua kể từ khi số lần đánh dấu cuối cùng lớn hơn 16ms, hãy tiếp tục tạo khung mới.").
SpeedHacking, nói chung, hoạt động bằng cách tiêm mã vào quá trình đang chạy và hack các chức năng định thời gian để trả về các "bọ ve" tăng tốc/chậm lại để sửa đổi tốc độ chạy của chương trình.
Mặc dù, tôi không thể chắc chắn cách chính xác CE đạt được điều này (mã nguồn là khá khó hiểu) nhưng một lập trình viên khác đã rút ra một điều tương tự (video) trên Linux. Trong source code, bạn có thể xem cách tác giả sửa đổi một lời gọi hệ thống tương tự cho Linux ("gettimeofday()") cho việc này.
go gettimeofday_orig;
int val;
gettimeofday_orig=(go)dlsym(RTLD_NEXT,"gettimeofday");
if (!timezero)
{
timezero = new timeval;
val = gettimeofday_orig(timezero,tz);
(*tv) = (*timezero);
return val;
}
Tôi không chắc chắn cách nó được phát hiện nhưng tôi sẽ làm theo ý tưởng của @ Harold rằng trò chơi có thể phát hiện thấy DLL bị tiêm.
Thuật ngữ nitpick: Trông giống như một móc của trình bao bọc libc cho 'gettimeofday()', không xây dựng hạt nhân riêng với hàm 'sys_gettimeofday()' đã sửa đổi. Vì vậy, bạn có thể nói rằng họ nối chức năng wrapper gettimeofday để chặn các cuộc gọi hệ thống và sửa đổi giá trị trả lại. –