Попробуй так
class A {
public:
void f() { std::cout<<"Hello"; }
};
...
((A*)0)->f();
А я и не утверждал, что это пример для подражания, и юные хакеры должны делать так.
Сразу скажу, что this там используется и в ф-цию передается- он просто NULL равен.
Ты же не пытаешься получить доступ к нестатическим членам класса, поэтому и
работает.
Я это, собственно, и имел в виду:
((A*)0)->fun();
004312BE xor ecx,ecx ; this ptr
004312C0 call A::fun (42EF09h)
...
@ILT+7940(?fun@A@@QAEXXZ):
0042EF09 jmp A::fun (4312F0h)
...
void fun() {
004312F0 push ebp
004312F1 mov ebp,esp
004312F3 sub esp,0CCh
004312F9 push ebx
004312FA push esi
004312FB push edi
004312FC push ecx ; Save this
004312FD lea edi,[ebp-0CCh]
00431303 mov ecx,33h
00431308 mov eax,0CCCCCCCCh
0043130D rep stos dword ptr [edi]
0043130F pop ecx ; Restore this
00431310 mov dword ptr [ebp-8],ecx
std::cout << "Hello!";
00431313 push offset string "Hello!" (48D0B8h)
00431318 push offset std::cout (49B254h)
0043131D call std::operator<< (42EE7Dh)
00431322 add esp,8
}
00431325 pop edi
00431326 pop esi
00431327 pop ebx
00431328 add esp,0CCh
0043132E cmp ebp,esp
00431330 call @ILT+6200(__RTC_CheckEsp) (42E83Dh)
00431335 mov esp,ebp
00431337 pop ebp
00431338 ret
Так,NetRaider в тебя стандартом запустил уже. А я в тебя кидаю книжкой B. Stroustrup "The design and evolution of C++", но тебе повезло- она нетолстая.
Я не против, я книги люблю. Просто, "The design and evolution of C++" я не читал, и пример выдумал сам...но это я скоро исправлю