There are many windows operating systems, and they all have different addresses for their API functions, because of different structured DLL's. When an application starts, it has a list of all functions that aren't originally a part of the application. These functions, called imports, are located in the operating systems DLL's, but the application doesn't know where. So before starting, it has to build the IAT table by finding the address of the API it wants to call.