Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
тъпа checksum_16 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение тъпа checksum_16
нящо се омотах...
някой срещал ли е подобна калкулация, така ми е показва IDA-та,
а ми трябва да я транслирам на питон...
бях я направил: сбора на всички байтове в масива - работеше, ся не :)

Код:
uint16_t checksum(uint8_t * data, int len){
    uint16_t hi = 0, lo = 0, r = 0;
    int i = 0;
    if (len >= 2) {
        for(i; i < len; i += 2) {
            lo += *data++;
            hi += *data++;
        }
    }
    if (len > i)
        r = *data;
    return r + hi + lo;
}

_________________
main[-1u]={1};


Последна промяна TheWizard на Сря Яну 23, 2019 9:36 am, променена общо 1 път



Сря Яну 23, 2019 8:22 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение Re: тъпа checksum_16
виж колко е 'i' в началото


Сря Яну 23, 2019 9:22 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: тъпа checksum_16
i = 0 ... преписал съм я грешно
всъщност май е сума на буфера align 16
сега ще я имитирам в питона

_________________
main[-1u]={1};


Сря Яну 23, 2019 9:38 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: тъпа checksum_16
CRC16 не е сбора на всички байтове. Малко по-сложно е от това

_________________
'просто' е технически синоним на 'красиво'


Сря Яну 23, 2019 2:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: тъпа checksum_16
не е CRC16, просто няква Mediatek тъпа чексума

всъщност функцията ми в питона е верна ... проблема е друг да го е ...

_________________
main[-1u]={1};


Сря Яну 23, 2019 3:40 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение Re: тъпа checksum_16
Това по какъв алгоритъм трябва да го сметне? Каква е машината, що за индианец е? Процесорът поддържа ли работа с неподравнен int ?


Сря Яну 23, 2019 8:16 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: тъпа checksum_16
firmware uploader - за GSM модул - Mediatek чипсет....
праща firmware на части [4096] .... за всяка част, чек-сумата е SUM_16 на байтовете ... туй ОК
и накрая тая чек сума SUM_16, която обхваща всички изпратени данни, която разрешава изтриването и началото на запис

обаче проблема е че, на чипсета му е чекната "write-protection" - прави чек сума на старата първа част, която се явява начална стойност на новата SUM_16
с не"protection" модули работи ... дмек тръгва от нула
но със - незнам кой е флага че е протектнат, и някакси трябва да намеря как смята старата страница

уплоадера го писах на питон за интеграцията в PlatformIO IDE, така сичко работи на "всички" OS
https://github.com/Wiz-IO/Mediatek-MT26 ... 25.py#L330

_________________
main[-1u]={1};


Сря Яну 23, 2019 9:29 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: тъпа checksum_16
Кода който си постнал въобще не е sum16 ами си е sum8 - само, че пишман оптимизирано да чете по 16 битови думи - пишман защото требваше първо да подравни поне на 16 или 32 бита адреса.

_________________
Мразя да мразя ...


Сря Яну 23, 2019 11:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: тъпа checksum_16
така ми го даде IDA-та (дезасемблирах DLL-a да видя командите), аз го "пооправих" като за форума
те са подравнени на 4096 на входа, което е кратно на uint16, само изравнява края...

Код:
__int16 __cdecl CHECK_SUM_WRITE(signed int len)
{
  int v1; // ecx
  unsigned int LEN; // edx
  unsigned int i; // eax
  int R; // ebx
  __int16 HI; // di
  __int16 LO; // si
  __int16 hi; // bp
  int H; // [esp+4h] [ebp-8h]
  int L; // [esp+8h] [ebp-4h]

  LEN = len;
  i = 0;
  R = 0;
  L = 0;
  H = 0;
  if ( len >= 2 )
  {
    HI = 0;
    LO = 0;
    do
    {
      LO += *(unsigned __int8 *)(v1 + i);
      hi = *(unsigned __int8 *)(v1 + i + 1);
      i += 2;
      HI += hi;
    }
    while ( i < len - 1 );
    LEN = len;
    LOWORD(H) = HI;
    LOWORD(L) = LO;
  }
  if ( i < LEN )
    R = *(unsigned __int8 *)(i + v1);
  return R + L + H;
}

_________________
main[-1u]={1};


Сря Яну 23, 2019 11:45 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: тъпа checksum_16
Пак същото - sum8 - щом връща L+H

Обаче ако можеш да го постнеш дизасемблирано на асемблер, че нещо ми намирисва C сорса ....

_________________
Мразя да мразя ...


Сря Яну 23, 2019 11:59 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: тъпа checksum_16
Код:
.text:1001F860 CHECK_SUM_WRITE proc near               ; CODE XREF: CMD_WriteData+8ED↓p
.text:1001F860
.text:1001F860 H               = dword ptr -8
.text:1001F860 L               = dword ptr -4
.text:1001F860 len             = dword ptr  4
.text:1001F860 dat             = dword ptr  8
.text:1001F860
.text:1001F860                 sub     esp, 8
.text:1001F863                 mov     edx, [esp+8+len]
.text:1001F867                 xor     eax, eax
.text:1001F869                 push    ebx
.text:1001F86A                 xor     ebx, ebx
.text:1001F86C                 mov     [esp+0Ch+L], eax
.text:1001F870                 mov     [esp+0Ch+H], eax
.text:1001F874                 cmp     edx, 2
.text:1001F877                 jl      short loc_1001F8AA
.text:1001F879                 push    ebp
.text:1001F87A                 push    esi
.text:1001F87B                 push    edi
.text:1001F87C                 dec     edx
.text:1001F87D                 mov     di, ax
.text:1001F880                 mov     si, ax
.text:1001F883
.text:1001F883 loc_1001F883:                           ; CODE XREF: CHECK_SUM_WRITE+37↓j
.text:1001F883                 movzx   ebp, byte ptr [ecx+eax]
.text:1001F887                 add     si, bp
.text:1001F88A                 movzx   ebp, byte ptr [ecx+eax+1]
.text:1001F88F                 add     eax, 2
.text:1001F892                 add     di, bp
.text:1001F895                 cmp     eax, edx
.text:1001F897                 jb      short loc_1001F883
.text:1001F899                 mov     edx, [esp+18h+len]
.text:1001F89D                 mov     word ptr [esp+18h+H], di
.text:1001F8A2                 pop     edi
.text:1001F8A3                 mov     word ptr [esp+14h+L], si
.text:1001F8A8                 pop     esi
.text:1001F8A9                 pop     ebp
.text:1001F8AA
.text:1001F8AA loc_1001F8AA:                           ; CODE XREF: CHECK_SUM_WRITE+17↑j
.text:1001F8AA                 cmp     eax, edx
.text:1001F8AC                 jnb     short loc_1001F8B2
.text:1001F8AE                 movzx   ebx, byte ptr [eax+ecx]
.text:1001F8B2
.text:1001F8B2 loc_1001F8B2:                           ; CODE XREF: CHECK_SUM_WRITE+4C↑j
.text:1001F8B2                 mov     eax, [esp+0Ch+H]
.text:1001F8B6                 add     eax, [esp+0Ch+L]
.text:1001F8BA                 add     eax, ebx
.text:1001F8BC                 pop     ebx
.text:1001F8BD                 add     esp, 8
.text:1001F8C0                 retn
.text:1001F8C0 CHECK_SUM_WRITE endp
.text:1001F8C0
.text:1001F8C0 ; ---------------------------------------------------------------------------
.text:1001F8C1                 align 10h

_________________
main[-1u]={1};


Чет Яну 24, 2019 12:10 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: тъпа checksum_16
зае.и ...
тва се изясни, ще търся "протекшъна" ... до тогава -викам EXE-то в конзолата,
не можах да намеря на Медиятека линукс варианта

_________________
main[-1u]={1};


Чет Яну 24, 2019 12:16 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: тъпа checksum_16
голям съм чайник...
няма никва защита (има AES криптиране но, не е реализирано от джикитайците)
опитвам се да запиша първия блок данни, който по адрес не е подравнен с flash erase page :)
бут-лоадера си мери чека(SUM) и реве
това го правя за последния блок данни, но за първия кой да се сети...

_________________
main[-1u]={1};


Чет Яну 24, 2019 12:34 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: тъпа checksum_16
... мдам ... това което ме съмняваше е разликата между C сорса и дизасемблира:
  • в C сорса v1 се ползва без да е декларирано и присвоено каквото и да е
  • интересно, че в дизасемблера len се подава като параметър в стека, а dat е в регистър ECX - малко странно ми идва компилаторската конвенция - първи параметър в регистър, втори в стека - обикновенно поне 2-3 са в регистри
та затова исках да го видя - общо взето наистина е пишман оптимизиран на ръка C сорс който върти в цикъл sum16 и накрая връща като резултат sum8 - което пък от своя страна говори много за програмиста дето го е писал :D

_________________
Мразя да мразя ...


Чет Яну 24, 2019 1:06 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение Re: тъпа checksum_16
... може и да съм бърникал из асемблера ... всъщност чексумата e сума на всички байтове закръглено на uint16


да го еа .....
Код:
............................................ /бут
--> B2082770000000400000001000 /cmd write to address, size
<-- 5A5A / ok
--> 4096 байта
--> 794E /част 1 сума
<-- 69 /ok
............................................/части, части..
--> 4096 байта
--> 6694 /част послена сума
<-- 69 /ok
<-- 5A /ок
--> 273D // тотал сума
<-- 5A /ok
--> A5 /ok
<-- 5A /ok
Application sent

_________________
main[-1u]={1};


Чет Яну 24, 2019 2:44 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 7 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни