I am working on a reverse engineering project involving ECU emulation and CAN diagnostic communication on a GMC vehicle (GM/GMLAN architecture), and I have noticed something interesting regarding module response IDs. For some modules such as the ECM and TCM, when the scanner sends a request to the physical ID (for example 7E0), the module responds with an offset of +0x08, resulting in the response ID 7E8, which matches the typical OBD/UDS diagnostic behavior. However, when attempting to access other modules in the vehicle, that same offset does not seem to apply, or a different offset appears to be used, which makes it difficult to correctly determine the response ID when trying to emulate an ECU or communicate with different modules on the network. I am trying to understand how GM defines the offset between request and response IDs for different modules (ECM, BCM, EBCM, TCM, etc.), and whether there is any known rule or table within the GMLAN / Global A architecture that can be used to calculate these offsets. If anyone has experience with GM diagnostics, CAN reverse engineering, or ECU/module emulation, or happens to have CAN logs from real diagnostic sessions, I would greatly appreciate any information that could help clarify how these response IDs are determined and how to properly access the rest of the modules on the network.

