Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

Как получить доступ к private-полю из блока asm?   Найти похожие ветки 

 
Ivan2   (2002-07-01 19:07) [0]

Здравствуйте! Как получить доступ к private-полю из другого модуля из блока asm?

Например есть класс TBaseArray с полем private FCount: integer. Как получить доступ к этому полю из блока asm другого модуля? Если бы поле
было public или блок asm находился в том же модуле, то было бы все просто:
asm
// EAX - указатель на экземпляр класса TBaseArray
mov EDX, [EAX].TBaseArray.FCount
end
Я, конечно, могу вычислить смещение поля вручную и задать константой (mov EDX, [EAX + FCountOffset]), но ведь это не круто...
Кто-нибудь знает?


 
Shaman_Naydak ©   (2002-07-01 19:23) [1]

Ты сам ответил :)
На то оно и приват поле, чтобы в него не лазили грязными руками..
Как вариант могу предложить только в своем модуле скопировать определение класса (только поля), тогда поле будет находиться на том же месте,но я все равно против таких шагов
Иллюстрирую:
unit Un1;
type TSuperClass = object(TControl)
private
FField: Integer;
public
procedure ABC;
end;

-----


unit Un2; // Твой

type TFakeClass = object(TControl)
private
FField: Integer;
end;


 
Shaman_Naydak ©   (2002-07-01 19:25) [2]

Толко учти, что компилиться модуль должен точно так же, как и тот (наличие галочки оптимизация, выравнивание полей записи и прочая)

И все одно это до переделки исходного класса


 
Юрий Зотов ©   (2002-07-01 23:07) [3]

Получить доступ можно, даже и без всякого ASM"а. Правда, это уже хакерские штучки, так что использовать не советую - ненадежно.

Но если очень надо... Ссылка на экземпляр объекта, как известно, дает его адрес. А поля расположены в порядке их объявления, начиная с "самого родительского" класса. Так что адрес есть, а вычислить смещение - не проблема, надо только заглянуть в исходники.

Но стоит изменить объявление хотя бы одного класса в цепочке наследования - и все, приплыли, смещение может стать уже другим. Так что не советую.



Страницы: 1 вся ветка

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
14-47733
-=CrazyFish=-
2002-06-11 15:17
2002.07.15
Оззи Осборн


1-47565
Катерина
2002-06-28 10:52
2002.07.15
Длинные строки в ListBox


1-47533
dlK
2002-07-04 16:11
2002.07.15
TApplicationService и TTimer, парюсь 2-ой день. =((


4-47903
Rival
2002-05-13 15:13
2002.07.15
Как легко поместить иконку в трэй и вызывать из


1-47450
kalliopiy
2002-07-03 13:46
2002.07.15
Есть ли