![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
> OK, so here's a question: I think I understand how to load a DLL and call
> the functions it exports, but... how do you find out what functions a DLL
> exports?
Google "list dll functions"? First result is this:
http://www.nirsoft.net/utils/dll_export_viewer.html
> Can you get an argument list? How about type information?
No. No.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
>> OK, so here's a question: I think I understand how to load a DLL and
>> call the functions it exports, but... how do you find out what
>> functions a DLL exports?
>
> Google "list dll functions"? First result is this:
> http://www.nirsoft.net/utils/dll_export_viewer.html
Well, it seems to work anyway...
>> Can you get an argument list? How about type information?
>
> No. No.
I had a feeling that would be the case. The symbols have to be in the
DLL so you can look them up, but nothing else is required...
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
C:\WINDOWS\system32\Audio3D.dll
0x100018F0 (0x02) DllGetObjectClass
0x10001A10 (0x03) DllCanUnloadNow
0x10001370 (0x04) _A3d@Create@12
Fascinating stuff, eh?
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible a écrit :
> OK, so here's a question: I think I understand how to load a DLL and
> call the functions it exports, but... how do you find out what functions
> a DLL exports?
>
> I mean, one way would be to find some documentation. But if you don't
> have any... is there some way to inspect the symbol list somehow? Can
> you get an argument list? How about type information?
Worse, How do you find which DLL are needed by a DLL ?
There is a "dependancy walker" (from steve P. Miller) but that might
not provide the argument list.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Along with a DLL inspector, I find a tool which lists every registered
COM object in the system.
OK, do you have ANY FRIGGIN IDEA how many COM objects are registered on
my PC?! Not counting the DLLs registered for that program I already
uninstalled. Acrobat Reader alone registers about 12 classes. o_O
God only knows what MS Office registers...
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible wrote:
> God only knows what MS Office registers...
C:\Program Files\Common Files\Microsoft Shared\Visual Database
Tools\DVT70.DLL
This single DLL registers exactly 50 ClassIDs. For example:
{03CB9467-FD9D-42A8-82F9-8615B4223E6E} Microsoft Visual Database Tools
Database Designer V7.0 MSVDTDatabaseDesigner7
{133E2230-74AF-4A79-8226-7AA2EBC018DA} DBNamespace Class
DBNamespace.DBNamespace.7
{1912B299-D07C-45DF-99DF-139D7F6FC4E8} Primer Class Primer.Primer.7
{1AECB7EC-4CFB-4866-8E08-8D6961E5C095} PrimerMgr Class PrimerMgr.PrimerMgr.7
{2C10A98F-D64F-43B4-BED6-DD0E1BF2074C} Microsoft Visual Database Tools
Query Designer V7.0 MSVDTQueryDesigner7
{31E4841B-9B7A-4EF2-8A83-8F1F70D7B0D7} Microsoft Visual Database Tools
Query Designer V7.0 Data property page
{3AABDBBA-9C39-400C-BA5A-0186866F8D25} Microsoft Visual Database Tools
Query Designer V7.0 Join Line property page
{43872FA3-D283-4CCD-9FC9-281AB33F5D01} Microsoft Visual Database Tools
Query Designer V7.0 Procedure Designer property page
I could go on... and that's just one DLL.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible wrote:
> This single DLL registers exactly 50 ClassIDs.
Topped that.
C:\Program Files\Java\jre1.5.0_11\bin\ssv.dll
This DLL registers *one hundred and three* ClassIDs:
{CAFEEFAC-0013-0000-0003-ABCDEFFEDCBA} Java Plug-in 1.3.0_03
{CAFEEFAC-0013-0000-0004-ABCDEFFEDCBA} Java Plug-in 1.3.0_04
{CAFEEFAC-0013-0000-0005-ABCDEFFEDCBA} Java Plug-in 1.3.0_05
{CAFEEFAC-0013-0001-0000-ABCDEFFEDCBA} Java Plug-in 1.3.1
{CAFEEFAC-0013-0001-0001-ABCDEFFEDCBA} Java Plug-in 1.3.1_01
...see a pattern yet?
Yep, there's a COM registration for every point-releast from 1.3.0_03 up
to 1.5.0_11. Which is pretty crazy, no?
Next time you install some program and it says "registering components"
or "writing registry keys", this is what it's doing. It's registering
millions of COM ClassIDs!
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
C:\Program Files\Windows Media Player\mpvis.dll
Exports the following functions:
0x4B0D7EA0 (0x01) DllCanUnloadNow
0x4B0D8A71 (0x02) DllGetClassObject
0x4B0D8A28 (0x03) DllMain
0x4B0D93C0 (0x04) DllRegisterServer
0x4B0D93D4 (0x05) DllUnregisterServer
Also the COM methods:
(0xC9) IToleranceVis::GetProperty
(0xCA) IToleranceVis::SetProperty
and the COM property:
(0xC8) IToleranceVis::foregroundColor
What this means, I have no idea...
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Now this is really quite interesting.
I found a DLL called autodisk.dll which exports half a dozen functions
and hundreds of COM methods and properties. I found several other DLLs
which apparently export... absolutely nothing. (Why do they exist then?)
Some DLLs for highly complex tasks appear to export a tiny amount of
stuff, so clearly there's something I'm not seeing. And then there are
huge, huge numbers of DLLs on the system which aren't registered anywhere.
And who says that staring into a screen full of code numbers is a good
way to learn stuff? ;-)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Invisible <voi### [at] dev null> wrote:
> OK, so here's a question: I think I understand how to load a DLL and
> call the functions it exports, but... how do you find out what functions
> a DLL exports?
That's what headers are for.
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |