Ну, в экзешнике понятно - это константа, которая указывает адрес определённой функции.
А если в подключаемой библиотеке? Ведь библиотеки могут подключаться в разном порядке, а адресное пространство одно.
AddressOf возвращает VA. Для скомпилированных в Native-код файлов (не важно, EXE или DLL) этот VA относительно ImageBase (то есть RVA) будет всегда константен. (Не для разных билдов, а для одного билда, сколько ни запускай его!)
Public Function getAddrOf() As Long
getAddrOf = getadr(AddressOf winProc)
End Function
Option Explicit
Dim t1 As New test1.cTest
Dim t2 As New test2.cTest
Sub Main()
Debug.Print t2.getAddrOf
Debug.Print t1.getAddrOf
End Sub
фи.Хакер писал(а):Если ты не начнёшь думать, я прекращу тебе помогать.
Что поленился поменять? что значит реалочится? Я специально сделал абсолютно одинаковые библиотеки, предполагая, что адреса функций у них должны совпасть.Хакер писал(а):Ты конечно же поленился поменять, и у тебя у обоих библиотек стоит база 0x11000000. Естественно, что при таком раскладе одна из библ реаллочится.
Если бы у них был одинаковый адрес функций то они что получается, вдвоем поместились в одном месте?специально сделал абсолютно одинаковые библиотеки, предполагая, что адреса функций у них должны совпасть.
Что поленился поменять?
arthur2 писал(а):что значит реалочится?
если бы addressof в них была бы константной, должны были бы возвращать одно и то же число.
Public Function Bar() As Long
Bar = Foo(AddressOf TraTaTa)
End Function
Public Function Foo(ByVal x As Long) As Long
Foo = x
End Function
Public Sub TraTaTa()
MsgBox "Actually, I remember having a fondness for balloons..."
End Sub
### Foo:
MOV EAX, DWORD PTR [ESP+4]
RETN 4
================================================
### Bar:
PUSH test.11001A90
CALL test.Foo
RETN
Именно это я и хотел понять: как в таком случае будет разрешено противоречие.ANDLL писал(а):Если бы у них был одинаковый адрес функций то они что получается, вдвоем поместились в одном месте?
Ну вот, теперь понятноХакер писал(а):При этом все места, которые перечислены в Релоках, fix-up'ятся на дельту, равную разнице желаемого ImageBase и получившегося ImageBase.
Константное число, возвращаемое AddressOf тоже фиксапится.
Цитата неполнаяесли бы addressof в них была бы константной, должны были бы возвращать одно и то же число.
Не надо раздражатьсяВообще, меня ещё раздражает кое-что.
Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 14