Программинг Форум для тем связанных с программированием
25.01.2011, 21:33
#51
Рыцарь
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
думаю понятно.
delphi Код:
var
i : integer ;
P : Pointer ;
OtherI1 : ^Integer ;
OtherI2 : integer ;
begin
i := 123123 ;
p := @i;
OtherI1 := p; //"ссылко"
OtherI2 := integer ( P^) ; //"копия"
ShowMessage ( inttostr ( integer ( p^) ) ) ; //123123
ShowMessage ( inttostr ( OtherI1^) ) ; //123123
ShowMessage ( inttostr ( OtherI2) ) ; //123123
i := 321321 ;
ShowMessage ( inttostr ( integer ( p^) ) ) ; //321321
ShowMessage ( inttostr ( OtherI1^) ) ; //321321
ShowMessage ( inttostr ( OtherI2) ) ; //123123
end ;
Добавлено через 3 минуты
в данном случае ему нужно
1. прочитать значение с off_40A798 - это базовый адрес по которому лежит экземпляр класса.
2. добавить к этому значение смещение переменной (на сколько там от базового адреса далеко нужная переменная)
3. загнать полученое значение в var value: ^НужныйТип;
4. юзать value^
__________________
L2Ext - project closed.
Последний раз редактировалось alexteam, 25.01.2011 в 21:34 .
Причина: Добавлено сообщение
За это сообщение alexteam нажился спасибкой от:
25.01.2011, 21:38
#52
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
так так
otheri1:^integer;
adr:=getmodulehandle('project25.exe') + $A798;
otheri1:=@adr;
messagebox(0,PChar(IntToStr(Integer(otheri1^))),'' ,0);
4237208
PS где-то я уже видел это число
__________________
Н а ч а л о .
25.01.2011, 21:42
#53
Рыцарь
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
Цитата:
Сообщение от
supernewbie
messagebox(0,PChar(IntToStr(Integer(otheri1^))),'' ,0);
:facepalm:
__________________
Шожиделать.. ботить хочется..
За это сообщение destructor нажился спасибкой от:
25.01.2011, 21:44
#54
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
че с ним не так))
__________________
Н а ч а л о .
25.01.2011, 21:50
#55
Рыцарь
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
весь код функции покажи
__________________
Шожиделать.. ботить хочется..
За это сообщение destructor нажился спасибкой от:
25.01.2011, 21:51
#56
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
delphi Код:
library path;
uses
SysUtils,
Windows,
Classes;
var
ID, ThrHandle: Cardinal ;
adr:Cardinal ;
objaddr:Pointer ;
otheri1:^cardinal ;
procedure MyProc;
begin
adr:=getmodulehandle( 'project25.exe' ) + $A798;
otheri1:=@adr;
//messagebox(0,PChar(IntToHex(objaddr,8)),'',0);
messagebox( 0 ,PChar ( IntToStr ( otheri1^) ) ,'' ,0 ) ;
end ;
{$R *.res}
begin
messagebox( 0 ,'pause' ,'' ,0 ) ;
ThrHandle:=CreateThread( nil ,0 ,@MyProc,nil ,0 ,id) ;
end .
__________________
Н а ч а л о .
25.01.2011, 21:54
#57
Рыцарь
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
Код:
procedure MyProc;
var //учимся НЕ юзать глобальные переменные
adr:^pointer;
objaddr:pointer;
begin
adr:=getmodulehandle('project25.exe') + $A798;
obaddr:=adr^;
messagebox(0,PChar(IntToHex(obaddr)),'',0);
end;
помоему так
__________________
Шожиделать.. ботить хочется..
За это сообщение destructor нажился спасибкой от:
25.01.2011, 21:56
#58
Рыцарь
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
delphi Код:
program Project2;
{$APPTYPE CONSOLE}
type
TMyClass = class
public
X: integer ;
Y: integer ;
Procedure ApplicationProcedure;
end ;
{ TMyClass }
procedure TMyClass.ApplicationProcedure ;
begin
Writeln ( x,' ' ,y) ;
end ;
var
MyObj : TMyClass;
Stored, OffsetX, OffsetY : Pointer ;
PIntX, PIntY : ^integer ;
begin
//приложение
MyObj := TMyClass.Create ;
MyObj.X := 100 ;
MyObj.Y := 200 ;
MyObj.ApplicationProcedure ;
//а это типо у нас
Stored := MyObj; //прочитать значение с off_40A798
OffsetX := @TMyClass( nil ) .x ; //т.к. я в этом же приложении то могу сделать воттак.
OffsetY := @TMyClass( nil ) .y ; //на самом деле у нас константы - смещения
PintX := pointer ( integer ( Stored) + integer ( OffsetX) ) ; //базовый адрес + смещение = адрес того где читать\менять
PintY := pointer ( integer ( Stored) + integer ( OffsetY) ) ;
PintX^ := 111 ; //меняем
PintY^ := 222 ;
//опять приложение
MyObj.ApplicationProcedure ;
readln ;
end .
__________________
L2Ext - project closed.
За это сообщение alexteam нажился спасибкой от:
25.01.2011, 21:56
#59
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
getmodulehandle возвращает кардинал же
__________________
Н а ч а л о .
25.01.2011, 21:59
#60
Рыцарь
Регистрация: 26.06.2009
Сообщений: 2,433
Сказал Спасибо: 154
Имеет 692 спасибок в 426 сообщенях
Цитата:
Сообщение от
supernewbie
кардинал же
это адрес начала твоего приложения в памяти
приведение типов гугли
__________________
Шожиделать.. ботить хочется..
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 03:35 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!