Hard to get to a point, but in general, you have to analyze the code of the image to find all the information
.
At first step you have to (manually) disassemble the code of different images, then find
what is similar between all images. After this, you can determine matching patterns to
locate the code/tables you want to find in any image.
Since there are only two bootrom main streams used on ME7, you can find some
addresses which get used in all images. For example, there is a pointer variable in RAM
at E242/E244 for the 05.XX bootroms which is set to point to the ecu identification table
in flash. If you locate the code where this pointer gets set, you can extract the table address
out of the code, for example:
82'0224: E6F41E2F MOV R4, #ECUIdentificationDataTable ; == 81'AF1E
82'0228: E6F50602 MOV R5, #0206h (81'8000)
82'022C: F6F442E2 MOV [ptr-ECUIdentificationDataTable], R4
82'0230: F6F544E2 MOV [00E244h], R5
Then you can parse the table and extract the identification strings, here is an excerpt of this table:
ECUIdentificationDataTable:
81'AF1E: 0000 DW 0000h ; len = 0, tag = 00
; [90] = VIN
81'AF20: 0000 DW 0000h ; ptr = NULL
81'AF22: 0000 DW 0000h
; [91] = VMECUHN
81'AF24: 0600 DW 0006h ; len=0, tag = 06 (ascii)
81'AF26: 0000 DW 0000h ; ptr = NULL
81'AF28: 0000 DW 0000h
; [92] = SSECUHN
81'AF2A: 060A DW 0A06h ; len = 10, tag = 06 (ascii)
81'AF2C: B203 DW 03B2h ; ptr = 81'83B2 (string_SSECUHN)
81'AF2E: 0602 DW 0206h
; [93] = SSECUHVN
81'AF30: 0000 DW 0000h
81'AF32: 0000 DW 0000h
81'AF34: 0000 DW 0000h
; [94] = SSECUSN
81'AF36: 060A DW 0A06h ; len = 10, tag = 06 (ascii)
81'AF38: BC03 DW 03BCh ; ptr = 81'83BC (string_SSECUSN)
81'AF3A: 0602 DW 0206h
....
For checksums it is basically the same. Partly there are fixed memory locations to look at
in all images or there are fixed patterns which you can search to find them.
For the data checksums you need to locate the checksumming function and then look into
the code to find out which type of checksum algorithm is done and which memory ranges are used.
At least I found the ranges only embedded in the code. A table-based method as brought up in the thread
http://www.nefariousmotorsports.com/forum/index.ph/topic,353.msg2216.html#msg2216I could not find in the code.