Interesting Findings ...



Changing image of smart man in Axapta client (Ver 3.0 / SP3) file..

I always used to be very curious to find out contents of Axapta client file(ax32.exe). This interest of mine first led me to find out file dependencies of Axapta client application. And that was quite long back. If interested, you can read my experience here.

This interest got rekindled after I happened to see some posts in Axapta Technet website about changing the image of smart man who appears when we start Axapta ver 3.0 / SP3 client.

This post contains my experience when I tried to change the image of smart man. Here I go ..

Since this file (Ax32.exe) is an executable, we need to use a decent resource editor which would enable us to analyse PE files. You might ask one or two questions now.

- What are PE files?
- Why should we use a tool for this purpose?

Well, PE stands for Project Executable. This is basically a type of file format. This format is the native format of executable binaries for all MS 32-bit operating systems. If you look into files with types like .EXE, .DLL, .OCX, .SYS etc, you would see that all these files uses same PE format. In fact, these files are referred to as PE files. This term was chosen because of the intention to have a standard file format across all flavors of Windows.

Many people say that it was Microsoft who introduced PE file format as part of the original Win32 specifications. However, root of this file format can be tracked to Common Object File Format (COFF) found on VAX/VMS from DEC. It is said that the original Windows NT team actually came from DEC and that they used the existing code in DEC for the Windows NT platform. For a detailed history on this, you might want to refer to this excellent article from Matt Pietrek.

Coming to resouce editors, these are basically very powerful tools. Using a decent resource editor, you can analyse file structure, track dependencies, correct checksums, repair or change resources etc.

By nature, such tools are meant for advanced users. Also it is strongly advised to take a back up of the original files before you modify anything using such tools.

The tool that I chose for this purpose - PE Explorer from HeavenTools. For information like how to use this tool etc, I would suggest you to download a demo version of this tool and look at the help file. Their help file is very comprehensive.

Once you install this and managed to open Axapta client (don't forget to take a backup!!), then all you have to do is - visit Resouces section. Once there then it is pretty straight forward to identify image of our Smart man and replace him with the image you fancy! :-)

File Dependency Analysis

Whenever I install Axapta, I always used to wonder about the dependency files for Axapta client application (ax32.exe). There are several types of file dependency. Some of them are -
   - Implicit Dependency
   - Delay-load Dependency
   - Forward Dependency
   - Explicit Dependency
For more detailed explanation about such types, please refer to Dependency Walker Help guide.

So recently when I had some free time, I decided to dig into finding out the set of files on which Axapta Client is depended on.

I decided to use an excellent utility called Dependency Walker (DW) version 2.1. For starters, DW is a free utility that scans any 32-bit or 64-bit Windows module (in this case Axapta client (ax32.exe)) and builds a hierarchical tree diagram of all dependent modules (dll, exe, ocx, etc). You can downloaded Dependency Walker from here.

I have a Dell Dimension 2400 in my home. The OS is MS Windows XP Professional. I installed a 2-tier MBS Axapta 2.5 with MSDE (that comes along with 2.5 CD) as the backend. Once I was convinced that everything works fine, I started my testing.

I opened Axapta client (ax32.exe) within the environment of Dependency Walker. And Dependency Walker beautifully scanned Axapta client for implicit, delay-loaded and forwarded dependencies. But I wanted to scan mainly for Explicit and System Hook Dependency. So I decided to use Profiling. There are various options available under Profiling. For example, there is an option called "Hook the process to gather more detailed dependency information". When you enable this option, I am quoting this the following from DW Help -

"Dependency Walker will inject a small DLL into the application being profiled to help gather details that can only be gathered from with the application itself. When the process being profiled is hooked, Dependency Walker is able to track which modules dynamically load other modules at runtime, as well as what functions are dynamically being called into those dynamically loaded modules.

When a process is not hooked, Dependency Walker can still track all dynamically loaded modules, but cannot provide information about which module loaded the dynamic modules or what dynamic functions were called."


Ohey ! It was a treat to watch Axapta client navigating through a horde of functions drawn from numerous modules (DLL, OCX etc). Altogether there were around 60 different modules that Axapta client was depended on. The Axapta installation that I had in my system is plain vanilla one. Had I installed MS Office, Axapta SP/MP, obviously the dependent files would have been more. And of course, if you decide to do this yourself, you may get same results or end up getting a different results based on your system and software setup. Here is my profile details -




Operating System: Microsoft Windows XP Professional (32-bit), version 5.01.2600 Service Pack 1
Program Executable: c:\program files\damgaard\axapta client\bin\AX32.EXE
Program Arguments: NONE
Starting Directory: C:\Program Files\Damgaard\Axapta Client\Bin\
Search Path: C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Roxio Shared\DLLShared\;C:\Program Files\MSDE\BINN

Dependency Walker Options Selected:
  - Simulate ShellExecute by inserting any App Paths directories into the PATH environment variable.
  - Log DllMain calls for process attach and process detach messages.
  - Hook the process to gather more detailed dependency information.
  - Log LoadLibrary function calls.
  - Log GetProcAddress function calls.
  - Log debug output messages.
  - Automatically open and profile child processes.





[Home]