From: "Andrew Haines" <[EMAIL PROTECTED]>
Yury Sidorov wrote:

Actually import by ordinal is implemented in works. Look at line 2416 of
ogcoff.pas
When AOrdNr < 0 it indicates that import is by name, but ordinal number
is specified as hint. Whan AOrdNr > 0 then import by ordinal only.


Okay yes I see that, but that is for the import lookup table not the
import address table, the import address table is the same format as the
import lookup table.

Here is the behavior I observed:

I import a function by index

function SomeFunction: stdcall; external 'xboxkrnl.exe' index '1';

when it is compiled the start of the .idata section looks like this:

ImportLookupTablePtr
DateTimeStamp
Junk
PtrToLibName
ImportAddressTablePtr

The Import Lookup Table is written correctly with the ordinal name as expected. When I look at the Import Address Table, the entries are *not the same* as the lookup table, as they should be, but instead *point* to an address that contains the ordinal(not or'ed), when it should contain
$80000000 or'ed against the import ordinal.


From the MS docs talking about the Import Address Table:

"Import Address Table RVA(Thunk Table): The RVA of the import address table. The contents of this table are identical to the contents of the
lookup table until the image is bound."

So even if my confusing explanation doesn't make sense, the Address
Table should mirror the Lookup Table which it doesn't.

It looks like maybe you are writing a Hint/Name table entry for an
ordinal which is only done when importing by name.

Yes. You are right. Import Address Table should contain the same data as Import Lookup Table. Currently it contains different data when importing by ordinal. It should be fixed, but it currently this bug has no effect on win32/64/CE. EXEs with ordinal imports are loaded properly.
Does it afeect xbox?

Yury. _______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to