Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизУзнать адрес в программе вызова процедуры Найти похожие ветки
← →
Влад Сташневский (2004-05-04 20:35) [0]Например:
procedure olala;
begin
beep;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
alala;//нужно узнать вот этот адрес
//не адрес проц.alala а место откуда её вызвали(адрес)
ShowMessage("olala");
end;
Если это возможно
← →
Игорь Шевченко © (2004-05-04 20:51) [1]
procedure DummyProc;
var
Callee: Integer;
begin
asm
push [ebp+4]
pop Callee
end;
ShowMessageFmt("Called from %.8x", [Callee]);
end;
procedure TfMain.Button1Click(Sender: TObject);
begin
DummyProc;
end;
Этот пример работает, но в каждом конкретном случае нужно полазить с отладчиком, чтобы узнать код пролога процедуры.
← →
Влад Сташневский (2004-05-04 21:12) [2]
> Игорь Шевченко ©
Спасибо.
Только показывает адрес следующей строки после вызова процедуры
Хотя мне так и нужно было.
← →
Defunct © (2004-05-04 21:17) [3]> Игорь Шевченко © (04.05.04 20:51) [1]
или так:procedure olala;
begin
beep;
end;
procedure TForm1.Button2Click(Sender: TObject);
var Callee:integer;
Begin
Asm
call @@L1
@@L1: pop callee
End;
alala;
ShowMessage(Format("Callee from %.8x",[Callee+1]));
end;
← →
Игорь Шевченко © (2004-05-04 21:39) [4][3] Defunct © (04.05.04 21:17)
Я бы посоветовал взять в руки отладчик и внимательно проверить адреса. Ваш пример показывает неверный адрес (ошибается на 2).
Кроме того, почувствуйте принципиальную разницу между моим примером и вашим в случае вызова процедуры olala из более чем одной точки.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c