MUSUM - утилита для подсчета контрольных сумм

Автор 7mm, 2011 Янв. 04, 01:01

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] утилитаmusumконтрольные суммы

7mm

Предлагаю вашему вниманию ещё одну программу-утилиту для подсчёта контрольных сумм. К радости интересующихся программированием, а также некоторых персон, сильно уважающих .NET и скрывающих свои чудо-алгоритмы с помощью винлиценз и прочей хрени, прилагаю исходный код. Здесь секретов быть не может, всё уже придумано до нас.

Утилита musum.exe.
Исходник musum.cpp.

Кому будет не сложно, прошу результаты тестирования и сравнения выложить тут...

:)

UPD:

Для справки: musum -h

musum [-j N] [-s src] [-d dst]
-j -- Число потоков (1..1024, default 'auto')
-s -- Исходный файл (default 'main.exe')
-d -- Результирующий файл (default 'checksum.dat')

Killbrum

Ток ты скажи как юзать а то честно скажу не каждый будет открывать .срр и смотреть что и куда

MuForum

#2
# Файлы на другом хостинге:
musum.exe;
musum.cpp;

Ссылка на сообщение;
Цитата: 7mm от 2011 Янв. 04, 13:10  Как и ожидалось, быдло-код. Ничего интересного.
Ну-ну... Глянем на твой "супер-код"...
DWORD WINAPI MainThread(LPVOID lpValue)
{
for (int i=(int)lpValue; i<CSUM_ARRAY_SIZE; i = i + nThreads)
{
DWORD dwResult = i << 9; // При каждой итерации инициализация 4-х байтовой переменной...

for (int j=0; j<(int)(nFileSize/4) - 1; j++) // При каждой итерации происходит деление на 4 и отнимание 1.
{
DWORD dwValue = ((DWORD *)pFileView)[j]; // При каждой итерации инициализация 4-х байтовой переменной...

switch ((i + j) % 3) {
case 0:
dwResult ^= dwValue;
break;
case 1:
dwResult += dwValue;
break;
case 2:
dwResult <<= dwValue % 11;
dwResult ^= dwValue;
break;
}

dwResult ^= (dwResult + i) >> (j % 16 + 3);
}

CSumArray[i] = dwResult;
}

InterlockedDecrement(&CompleteCounter);

return 0;
}
Могу тебе сказать лишь одно - Ты абсолютно ПРАВИЛЬНО сказал о СВОЁМ КОДЕ!!!
- Прямо в десятку =)))

murusfan

Цитата: MuForum от 2011 Янв. 04, 14:38  # Файлы на другом хостинге:
musum.exe;
musum.cpp;

Ссылка на сообщение;

Ну-ну... Глянем на твой "супер-код"...
DWORD WINAPI MainThread(LPVOID lpValue)
{
for (int i=(int)lpValue; i<CSUM_ARRAY_SIZE; i = i + nThreads)
{
DWORD dwResult = i << 9; // При каждой итерации инициализация 4-х байтовой переменной...

for (int j=0; j<(int)(nFileSize/4) - 1; j++) // При каждой итерации происходит деление на 4 и отнимание 1.
{
DWORD dwValue = ((DWORD *)pFileView)[j]; // При каждой итерации инициализация 4-х байтовой переменной...

switch ((i + j) % 3) {
case 0:
dwResult ^= dwValue;
break;
case 1:
dwResult += dwValue;
break;
case 2:
dwResult <<= dwValue % 11;
dwResult ^= dwValue;
break;
}

dwResult ^= (dwResult + i) >> (j % 16 + 3);
}

CSumArray[i] = dwResult;
}

InterlockedDecrement(&CompleteCounter);

return 0;
}
Могу тебе сказать лишь одно - Ты абсолютно ПРАВИЛЬНО сказал о СВОЁМ КОДЕ!!!
- Прямо в десятку =)))
я думаю тут все пливать на код т.к вещь нужная, так что помолчи уже быдло томят. вроде ты к ним не относился.

MuForum

#4
Цитата: murusfan от 2011 Янв. 04, 16:38  я думаю тут все пливать на код т.к вещь нужная, так что помолчи уже быдло томят. вроде ты к ним не относился.

За код заикнулся "7mm", так что пусть и отвечает...
- Мы ещё посмотри у кого "быдло-код", и кто чего стоит...
Вещь нужная? - Тогда используй нормальные программы от P4F v0.3 или BoR v1.0.0.120;

7mm

Вот что выдаёт IDA для функции MainThread:

.text:00401080 ; DWORD __stdcall MainThread(LPVOID)
.text:00401080 MainThread      proc near               ; DATA XREF: _main+178o
.text:00401080
.text:00401080 arg_0           = dword ptr  4
.text:00401080
.text:00401080                 push    ebp
.text:00401081                 mov     ebp, [esp+4+arg_0]
.text:00401085                 cmp     ebp, 400h
.text:0040108B                 jge     loc_401119
.text:00401091                 mov     eax, nFileSize
.text:00401096                 push    ebx
.text:00401097                 shr     eax, 2
.text:0040109A                 dec     eax <---------------------------------- eax = (nFileSize/4 - 1)
.text:0040109B                 push    esi
.text:0040109C                 mov     [esp+0Ch+arg_0], eax
.text:004010A0                 push    edi
.text:004010A1
.text:004010A1 loc_4010A1:                             ; CODE XREF: MainThread+94j
.text:004010A1                 mov     edi, ebp
.text:004010A3                 shl     edi, 9   <-------------------------------- edi = (i << 9)
.text:004010A6                 xor     esi, esi
.text:004010A8                 test    eax, eax
.text:004010AA                 jle     short loc_401101
.text:004010AC                 lea     esp, [esp+0]
.text:004010B0
.text:004010B0 loc_4010B0:                             ; CODE XREF: MainThread+7Bj
.text:004010B0                 mov     eax, pFileView
.text:004010B5                 mov     ebx, [eax+esi*4]  <---------------- ebx = ((DWORD *)pFileView)[j])
.text:004010B8                 lea     eax, [esi+ebp]
.text:004010BB                 cdq
.text:004010BC                 mov     ecx, 3
.text:004010C1                 idiv    ecx
.text:004010C3                 sub     edx, 0
.text:004010C6                 jz      short loc_4010E5
.text:004010C8                 sub     edx, 1
.text:004010CB                 jz      short loc_40112A
.text:004010CD                 sub     edx, 1
.text:004010D0                 jnz     short loc_4010E7
.text:004010D2                 mov     eax, 0BA2E8BA3h
.text:004010D7                 mul     ebx
.text:004010D9                 shr     edx, 3
.text:004010DC                 imul    edx, 0Bh
.text:004010DF                 mov     ecx, ebx
.text:004010E1                 sub     ecx, edx
.text:004010E3                 shl     edi, cl
.text:004010E5
.text:004010E5 loc_4010E5:                             ; CODE XREF: MainThread+46j
.text:004010E5                 xor     edi, ebx
.text:004010E7
.text:004010E7 loc_4010E7:                             ; CODE XREF: MainThread+50j
.text:004010E7                                         ; MainThread+ACj
.text:004010E7                 mov     ecx, esi
.text:004010E9                 and     ecx, 0Fh
.text:004010EC                 lea     edx, [edi+ebp]
.text:004010EF                 add     ecx, 3
.text:004010F2                 shr     edx, cl
.text:004010F4                 inc     esi
.text:004010F5                 xor     edi, edx
.text:004010F7                 cmp     esi, [esp+10h+arg_0]
.text:004010FB                 jl      short loc_4010B0
.text:004010FD                 mov     eax, [esp+10h+arg_0]
.text:00401101
.text:00401101 loc_401101:                             ; CODE XREF: MainThread+2Aj
.text:00401101                 mov     CSumArray[ebp*4], edi
.text:00401108                 add     ebp, dword_411998
.text:0040110E                 cmp     ebp, 400h
.text:00401114                 jl      short loc_4010A1
.text:00401116                 pop     edi
.text:00401117                 pop     esi
.text:00401118                 pop     ebx
.text:00401119
.text:00401119 loc_401119:                             ; CODE XREF: MainThread+Bj
.text:00401119                 push    offset CompleteCounter ; lpAddend
.text:0040111E                 call    ds:InterlockedDecrement
.text:00401124                 xor     eax, eax
.text:00401126                 pop     ebp
.text:00401127                 retn    4
.text:0040112A ; ---------------------------------------------------------------------------
.text:0040112A
.text:0040112A loc_40112A:                             ; CODE XREF: MainThread+4Bj
.text:0040112A                 add     edi, ebx
.text:0040112C                 jmp     short loc_4010E7
.text:0040112C MainThread      endp

Ваши комментарии оказались неуместны. Если асма не знаете, то объясняю:
1. Выражение [ (int)(nFileSize/4) - 1 ] вычисляется один раз в начале функции и заносится в локальную переменную.
2. Никаких "инициализаций 4-х байтовых переменных" при каждой итерации не происходит, т.к. эти переменные представлены регистрами.

Как видно, компилятор оказался гораздо умнее Вас. Быдло-кодеры просто не способны понимать элементарные вещи...

Похожие темы (1)

Сообщений: 64
Просмотров: 17838