1. 인텔 방식

 

unsigned char CalcChecksum(unsigned char *data, int leng)
{
  unsigned char csum;
 
    csum = 0xFF;
    for (;leng > 0;leng--)
        csum += *data++;
    return ~csum;
}

인텔 방식의 마이크로프로세서 실행파일 체크섬의 예

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

     Start code     Byte count     Address     Record type     Data     Checksum

데이터만 더하면

:100130003F0156702B5E712B722B732146013421C7
FF +  10 + 01 + 30 +  3F + 01 + 56 + 70 + 2B + 5E + 71 + 2B + 72 + 2B +73 + 21 + 46 + 01 + 34 + 21 
= 538

한바이트로 모듈라를 취하고, 다시 1의 보수를 취하면 계산이 끝난다. ~38 = C7



2. 모토로라 방식


unsigned char CalcChecksum(unsigned char *data, int leng)
{
  unsigned char csum;
 
    csum = 0;
    for (;leng > 0;leng--)
        csum += *data++;
 
    return 0xFF - csum;
}

모토로라 방식의 마이크로프로세서 실행파일 체크섬의 예

S00F000068656C6C6F202020202000003C
S11F00007C0802A6900100049421FFF07C6C1B787C8C23783C6000003863000026
S11F001C4BFFFFE5398000007D83637880010014382100107C0803A64E800020E9
S111003848656C6C6F20776F726C642E0A0042
S5030003F9
S9030000FC

     Start code     Record type     Byte count     Address     Data     Checksum


데이터만 더하면

S111003848656C6C6F20776F726C642E0A0042
11 + 00 + 38 + 48 + 65 + 6C + 6C + 6F + 20 + 77 + 6F + 72 + 6C + 64 + 2E + 0A +00 = 4BD

4BD에서 한바이트로 모듈라를 취하고, 0xFF에서 빼면 계산이 끝난다.

FF - BD = 42


http://ko.wikipedia.org/wiki/%EC%B2%B4%ED%81%AC%EC%84%AC


+ Recent posts