Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: ne_viens
Дата сообщения: 02.03.2014 11:27
Ну, может быть, если exe архиважная, то надо ее собирать с релоками. ASLR ввели для того, чтобы злые хацкеры не знали, где код находится в памяти и несмогли бы добавить свой.
Если по умолчанию в последних версиях ml.exe это включено, то выключается с /link /FIXED:YES
Из уже собранного удаляется, если поставить галочку "Relocations stripped" в IMAGE_NT_HEADERS.Characteristics.
Это касается 64bit кода тоже, так как релоков пока никто там неотменял, по крайней мере для секции данных.
Автор: JFK2005
Дата сообщения: 02.03.2014 16:58
ne_viens
Хорошо. А как дело обстоит со старыми программами? Будут ли они нормально выполняться под Vista/7/8, если удалить секцию релокейшенов? Или во всех старых программах флаг "Relocations stripped" уже установлен по умолчанию?
Автор: ne_viens
Дата сообщения: 02.03.2014 17:33
Если удалить релоки, но флаг "Relocations stripped" не установить, exe не загрузится.
Есть прога LordPE, в которой можно посмотрть, что и как в exe файлах, а также поправить необходимое.
Релоки удалялись (не создавались?) в ехе файлах, которые с cl.exe до MSVC2005 (?) собирались. Борланд всегда с релоками собирал. MinGW- без релоков, итд.
Автор: JFK2005
Дата сообщения: 02.03.2014 18:34
ne_viens
LordPE устарела (например, она не поддерживает x64), я давно пользуюсь CFF Explorer'ом.

Посмотрел сейчас характеристики старой программы, собранной в VC++ 2005 - флаг "Relocations stripped" выставлен. Хотя релокейшены в .exe присутствуют. Видимо, VC++ 2005 выставляет этот флаг по умолчанию.

Автор: Astra55
Дата сообщения: 22.03.2014 05:30
Существует ли возможность сброса флага Z командой из двух байт, желательно, не изменяя значений регистров? Пример для обратной операции:
cmp al, al всегда Z=1
????????? всегда Z=0
Автор: Prober
Дата сообщения: 22.03.2014 07:26
Astra55
Первое, что в голову пришло:
or esp, esp
Автор: Astra55
Дата сообщения: 22.03.2014 11:15
Prober
То, что надо, респект! А то мне все доказывали что это невозможно
Автор: Zloy_Gelud
Дата сообщения: 22.04.2014 14:02
Доброго времени суток.
Есть такой кусок кода:

Код: USE32
ORG 100h

PUSH EBP
MOV EBP, ESP

PUSH DWORD [EBP + 36]
PUSH DWORD [EBP + 32]
PUSH DWORD [EBP + 28]
PUSH DWORD [EBP + 24]
PUSH DWORD [EBP + 20]
PUSH DWORD [EBP + 16]
PUSH DWORD [EBP + 12]
PUSH DWORD [EBP + 8]

CALL %u

POP EBP
RETN
Автор: ne_viens
Дата сообщения: 22.04.2014 16:32
.const
_p REAL4 11.111
_q REAL4 22.222

;...
fld _p
fstp DWORD ptr[EBP + 36]
fld _q    
fstp DWORD ptr[EBP + 32]
;...

Автор: Zloy_Gelud
Дата сообщения: 29.04.2014 14:36
ne_viens -- спасибо, но в FASMe такой код не прошел.
Ладно, этот вопрос опустим. Возможно ли этот код переделать для работы в FASMe?

Код: Func smethod_3($uShort)
    Local $num = BitAND($uShort, 0x1F) * 8
    Local $num2 = BitAND(BitShift($uShort, 5), 0x3F) * 4
    Local $num3 = BitShift($uShort, 11) * 8
    Return BitOR(BitOR(BitOR(-16777216, BitShift($num3, -0x10)), BitShift($num2, -8)), $num)
EndFunc ;==>smethod_3
Автор: ne_viens
Дата сообщения: 29.04.2014 15:21

Код: section '.rdata' data readable

_p dt 11.111
_q dt 22.222

section '.text' code readable executable

;...
    sub esp, 8
    fld [_q]
    fstp dword[esp+4]
    fld [_p]
    fstp dword[esp]
    push dword[ebp+28]
    push dword[ebp+24]
;...
Автор: Zloy_Gelud
Дата сообщения: 29.04.2014 15:23
ne_viens

Цитата:
Что это?

Autoit код. Надо выполнить теже битовые опирации только на асме...
Автор: ne_viens
Дата сообщения: 29.04.2014 16:13
На Матлаб больше похож.

Код: smethod_3:
    mov edx, dword[esp+4] ;$uShort
    mov ecx, edx

    shl ecx, 5
    and ecx, 3Fh
    shl ecx, 2
    shr ecx, 8 ;num2

    shl edx, 11
    shl edx, 3 ;num3
    
    shr edx, 10h
    or edx, -16777216 ;0FF000000h
    or edx, ecx
    
    mov eax, dword[esp+4] ;$uShort
    and eax, 1Fh
    shl eax, 3 ;num
    
    or eax, edx
    ret 4
Автор: Zloy_Gelud
Дата сообщения: 29.04.2014 16:22
ne_viens -- благодарю. Буду разбираться.
Автор: ne_viens
Дата сообщения: 29.04.2014 16:49
Err, оказывается сдвиг у Autoit в другую сторону в отличии от Matlab:

Код: smethod_3:
    mov edx, dword[esp+4] ;$uShort
    mov ecx, edx

    shr ecx, 5
    and ecx, 3Fh
    shl ecx, 2 ;num2
    shl ecx, 8

    shr edx, 11
    shl edx, 3 ;num3
    
    shl edx, 10h
    or edx, -16777216 ;0FF000000h
    or edx, ecx
    
    mov eax, dword[esp+4] ;$uShort
    and eax, 1Fh
    shl eax, 3 ;num
    
    or eax, edx
    ret 4
Автор: LadyOfWood
Дата сообщения: 07.05.2014 13:40
Эх давно с асмом не связывался Как можно переписать, без использования асма.

Код:
var
Plane1,
Plane2,
Plane3,
Plane4: PByte;
Value: Byte;

asm
MOV AL, [Value]

MOV EDX, [Plane4] // take the 4 MSBs from the 4 runs and build a nibble
SHL BYTE PTR [EDX], 1 // read MSB and prepare next run at the same time
RCL AL, 1 // MSB from previous shift is in CF -> move it to AL

MOV EDX, [Plane3] // now do the same with the other three runs
SHL BYTE PTR [EDX], 1
RCL AL, 1

MOV EDX, [Plane2]
SHL BYTE PTR [EDX], 1
RCL AL, 1

MOV EDX, [Plane1]
SHL BYTE PTR [EDX], 1
RCL AL, 1

MOV [Value], AL
end;
Автор: bomzzz
Дата сообщения: 07.05.2014 13:43
в кодах. вставкой. на другом языке.
Автор: ne_viens
Дата сообщения: 07.05.2014 14:35
>... на другом языке.


Код: unsigned char getMSBbits(unsigned char Value, unsigned char* Plane1, unsigned char* Plane2, unsigned char* Plane3, unsigned char* Plane4)
{
    Value <<= 4;
    if(*Plane1 & 0x80)
        Value |= 1;
    *Plane1 <<= 1;
    if(*Plane2 & 0x80)
        Value |= 2;
    *Plane2 <<= 1;
    if(*Plane3 & 0x80)
        Value |= 4;
    *Plane3 <<= 1;
    if(*Plane4 & 0x80)
        Value |= 8;
    *Plane4 <<= 1;
    return Value;
}
Автор: MERCURY127
Дата сообщения: 07.05.2014 17:21
ne_viens, а зачем IFs? и вообще, это точно тот же самый код? Или этот сишный код и есть исходник для дампа?
Автор: ne_viens
Дата сообщения: 07.05.2014 17:52
В C нет операций с флагом переноса. В паскале, я думаю, что тем более. Быстродействие примерно одинаковое у обоих кусков кода- оптимизированный C с ифами на пару процентов быстрее.

Поправка: Если данные случайны, asm версия 2х быстрее.
Автор: LadyOfWood
Дата сообщения: 07.05.2014 21:14
ne_viens
Спасибо, у меня паскалевский код такой получился

Код:
Value := Value shl 4;
if (Plane1^ and $80) <> 0 then Value := Value or $1;
Plane1^ := Plane1^ shl 1;
if (Plane2^ and $80) <> 0 then Value := Value or $2;
Plane2^ := Plane2^ shl 1;
if (Plane3^ and $80) <> 0 then Value := Value or $4;
Plane3^ := Plane3^ shl 1;
if (Plane4^ and $80) <> 0 then Value := Value or $8;
Plane4^ := Plane4^ shl 1;
Автор: ne_viens
Дата сообщения: 08.05.2014 15:36
Ещё вариант:

Код: #include "xmmintrin.h"
void getMSBbits4(unsigned int* Plane1, unsigned char* MSBbitsOut, int len)
{
    int j;
    register __m64 mm0, mm1, mm2;

    mm1 = _mm_setzero_si64();
    mm2 = _m_from_int(-1);
    mm2 = _m_punpcklbw(mm2, mm1);
    
    for(j = 0; j < len; ++j)
    {
        mm0 = _m_from_int(Plane1[j]);
        MSBbitsOut[j] = _m_pmovmskb(mm0);
        mm0 = _m_punpcklbw(mm0, mm1);
        mm0 = _m_psllwi(mm0, 1);
        mm0 = _m_pand(mm0, mm2);
        mm0 = _m_packuswb(mm0, mm1);
        Plane1[j] = _m_to_int(mm0);
    }

    _mm_empty();
}
Автор: a3ro
Дата сообщения: 24.05.2014 22:58
[more] Код ассемблера немного знаю, но при таких размерах путаюсь.
Что эта программа делает? Помогите расшифровать, пожалуйста

./a.out: file format elf64-x86-64


Disassembly of section .init:

00000000004008d8 <_init>:
4008d8:    48 83 ec 08     sub rsp,0x8
4008dc:    e8 0b 01 00 00     call 4009ec <call_gmon_start>
4008e1:    48 83 c4 08     add rsp,0x8
4008e5:    c3     ret

Disassembly of section .plt:

00000000004008f0 <_ZNSolsEi@plt-0x10>:
4008f0:    ff 35 ea 0d 20 00     push QWORD PTR [rip+0x200dea] # 6016e0 <_GLOBAL_OFFSET_TABLE_+0x8>
4008f6:    ff 25 ec 0d 20 00     jmp QWORD PTR [rip+0x200dec] # 6016e8 <_GLOBAL_OFFSET_TABLE_+0x10>
4008fc:    0f 1f 40 00     nop DWORD PTR [rax+0x0]

0000000000400900 <_ZNSolsEi@plt>:
400900:    ff 25 ea 0d 20 00     jmp QWORD PTR [rip+0x200dea] # 6016f0 <_GLOBAL_OFFSET_TABLE_+0x18>
400906:    68 00 00 00 00     push 0x0
40090b:    e9 e0 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400910 <_Znam@plt>:
400910:    ff 25 e2 0d 20 00     jmp QWORD PTR [rip+0x200de2] # 6016f8 <_GLOBAL_OFFSET_TABLE_+0x20>
400916:    68 01 00 00 00     push 0x1
40091b:    e9 d0 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400920 <_ZNSt8ios_base4InitC1Ev@plt>:
400920:    ff 25 da 0d 20 00     jmp QWORD PTR [rip+0x200dda] # 601700 <_GLOBAL_OFFSET_TABLE_+0x28>
400926:    68 02 00 00 00     push 0x2
40092b:    e9 c0 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400930 <__libc_start_main@plt>:
400930:    ff 25 d2 0d 20 00     jmp QWORD PTR [rip+0x200dd2] # 601708 <_GLOBAL_OFFSET_TABLE_+0x30>
400936:    68 03 00 00 00     push 0x3
40093b:    e9 b0 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400940 <__cxa_atexit@plt>:
400940:    ff 25 ca 0d 20 00     jmp QWORD PTR [rip+0x200dca] # 601710 <_GLOBAL_OFFSET_TABLE_+0x38>
400946:    68 04 00 00 00     push 0x4
40094b:    e9 a0 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400950 <_ZNSt8ios_base4InitD1Ev@plt>:
400950:    ff 25 c2 0d 20 00     jmp QWORD PTR [rip+0x200dc2] # 601718 <_GLOBAL_OFFSET_TABLE_+0x40>
400956:    68 05 00 00 00     push 0x5
40095b:    e9 90 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400960 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>:
400960:    ff 25 ba 0d 20 00     jmp QWORD PTR [rip+0x200dba] # 601720 <_GLOBAL_OFFSET_TABLE_+0x48>
400966:    68 06 00 00 00     push 0x6
40096b:    e9 80 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400970 <_ZNSirsERi@plt>:
400970:    ff 25 b2 0d 20 00     jmp QWORD PTR [rip+0x200db2] # 601728 <_GLOBAL_OFFSET_TABLE_+0x50>
400976:    68 07 00 00 00     push 0x7
40097b:    e9 70 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400980 <_ZNSolsEPFRSoS_E@plt>:
400980:    ff 25 aa 0d 20 00     jmp QWORD PTR [rip+0x200daa] # 601730 <_GLOBAL_OFFSET_TABLE_+0x58>
400986:    68 08 00 00 00     push 0x8
40098b:    e9 60 ff ff ff     jmp 4008f0 <_init+0x18>

0000000000400990 <_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@plt>:
400990:    ff 25 a2 0d 20 00     jmp QWORD PTR [rip+0x200da2] # 601738 <_GLOBAL_OFFSET_TABLE_+0x60>
400996:    68 09 00 00 00     push 0x9
40099b:    e9 50 ff ff ff     jmp 4008f0 <_init+0x18>

00000000004009a0 <__gxx_personality_v0@plt>:
4009a0:    ff 25 9a 0d 20 00     jmp QWORD PTR [rip+0x200d9a] # 601740 <_GLOBAL_OFFSET_TABLE_+0x68>
4009a6:    68 0a 00 00 00     push 0xa
4009ab:    e9 40 ff ff ff     jmp 4008f0 <_init+0x18>

00000000004009b0 <_Unwind_Resume@plt>:
4009b0:    ff 25 92 0d 20 00     jmp QWORD PTR [rip+0x200d92] # 601748 <_GLOBAL_OFFSET_TABLE_+0x70>
4009b6:    68 0b 00 00 00     push 0xb
4009bb:    e9 30 ff ff ff     jmp 4008f0 <_init+0x18>

Disassembly of section .text:

00000000004009c0 <_start>:
4009c0:    31 ed     xor ebp,ebp
4009c2:    49 89 d1     mov r9,rdx
4009c5:    5e     pop rsi
4009c6:    48 89 e2     mov rdx,rsp
4009c9:    48 83 e4 f0     and rsp,0xfffffffffffffff0
4009cd:    50     push rax
4009ce:    54     push rsp
4009cf:    49 c7 c0 90 12 40 00     mov r8,0x401290
4009d6:    48 c7 c1 a0 12 40 00     mov rcx,0x4012a0
4009dd:    48 c7 c7 cc 0a 40 00     mov rdi,0x400acc
4009e4:    e8 47 ff ff ff     call 400930 <__libc_start_main@plt>
4009e9:    f4     hlt
4009ea:    90     nop
4009eb:    90     nop

00000000004009ec <call_gmon_start>:
4009ec:    48 83 ec 08     sub rsp,0x8
4009f0:    48 8b 05 d9 0c 20 00     mov rax,QWORD PTR [rip+0x200cd9] # 6016d0 <_DYNAMIC+0x210>
4009f7:    48 85 c0     test rax,rax
4009fa:    74 02     je 4009fe <call_gmon_start+0x12>
4009fc:    ff d0     call rax
4009fe:    48 83 c4 08     add rsp,0x8
400a02:    c3     ret
400a03:    90     nop
400a04:    90     nop
400a05:    90     nop
400a06:    90     nop
400a07:    90     nop
400a08:    90     nop
400a09:    90     nop
400a0a:    90     nop
400a0b:    90     nop
400a0c:    90     nop
400a0d:    90     nop
400a0e:    90     nop
400a0f:    90     nop

0000000000400a10 <deregister_tm_clones>:
400a10:    b8 67 17 60 00     mov eax,0x601767
400a15:    55     push rbp
400a16:    48 2d 60 17 60 00     sub rax,0x601760
400a1c:    48 83 f8 0e     cmp rax,0xe
400a20:    48 89 e5     mov rbp,rsp
400a23:    77 02     ja 400a27 <deregister_tm_clones+0x17>
400a25:    5d     pop rbp
400a26:    c3     ret
400a27:    b8 00 00 00 00     mov eax,0x0
400a2c:    48 85 c0     test rax,rax
400a2f:    74 f4     je 400a25 <deregister_tm_clones+0x15>
400a31:    5d     pop rbp
400a32:    bf 60 17 60 00     mov edi,0x601760
400a37:    ff e0     jmp rax
400a39:    0f 1f 80 00 00 00 00     nop DWORD PTR [rax+0x0]

0000000000400a40 <register_tm_clones>:
400a40:    b8 60 17 60 00     mov eax,0x601760
400a45:    55     push rbp
400a46:    48 2d 60 17 60 00     sub rax,0x601760
400a4c:    48 c1 f8 03     sar rax,0x3
400a50:    48 89 e5     mov rbp,rsp
400a53:    48 89 c2     mov rdx,rax
400a56:    48 c1 ea 3f     shr rdx,0x3f
400a5a:    48 01 d0     add rax,rdx
400a5d:    48 89 c6     mov rsi,rax
400a60:    48 d1 fe     sar rsi,1
400a63:    75 02     jne 400a67 <register_tm_clones+0x27>
400a65:    5d     pop rbp
400a66:    c3     ret
400a67:    ba 00 00 00 00     mov edx,0x0
400a6c:    48 85 d2     test rdx,rdx
400a6f:    74 f4     je 400a65 <register_tm_clones+0x25>
400a71:    5d     pop rbp
400a72:    bf 60 17 60 00     mov edi,0x601760
400a77:    ff e2     jmp rdx
400a79:    0f 1f 80 00 00 00 00     nop DWORD PTR [rax+0x0]

0000000000400a80 <__do_global_dtors_aux>:
400a80:    80 3d 09 0f 20 00 00     cmp BYTE PTR [rip+0x200f09],0x0 # 601990 <completed.6092>
400a87:    75 11     jne 400a9a <__do_global_dtors_aux+0x1a>
400a89:    55     push rbp
400a8a:    48 89 e5     mov rbp,rsp
400a8d:    e8 7e ff ff ff     call 400a10 <deregister_tm_clones>
400a92:    5d     pop rbp
400a93:    c6 05 f6 0e 20 00 01     mov BYTE PTR [rip+0x200ef6],0x1 # 601990 <completed.6092>
400a9a:    f3 c3     repz ret
400a9c:    0f 1f 40 00     nop DWORD PTR [rax+0x0]

0000000000400aa0 <frame_dummy>:
400aa0:    48 83 3d 10 0a 20 00     cmp QWORD PTR [rip+0x200a10],0x0 # 6014b8 <__JCR_END__>
400aa7:    00
400aa8:    74 1b     je 400ac5 <frame_dummy+0x25>
400aaa:    b8 00 00 00 00     mov eax,0x0
400aaf:    48 85 c0     test rax,rax
400ab2:    74 11     je 400ac5 <frame_dummy+0x25>
400ab4:    55     push rbp
400ab5:    bf b8 14 60 00     mov edi,0x6014b8
400aba:    48 89 e5     mov rbp,rsp
400abd:    ff d0     call rax
400abf:    5d     pop rbp
400ac0:    e9 7b ff ff ff     jmp 400a40 <register_tm_clones>
400ac5:    e9 76 ff ff ff     jmp 400a40 <register_tm_clones>
400aca:    90     nop
400acb:    90     nop

0000000000400acc <main>:
400acc:    55     push rbp
400acd:    48 89 e5     mov rbp,rsp
400ad0:    53     push rbx
400ad1:    48 83 ec 58     sub rsp,0x58
400ad5:    48 8d 45 ac     lea rax,[rbp-0x54]
400ad9:    48 89 c6     mov rsi,rax
400adc:    bf 60 17 60 00     mov edi,0x601760
400ae1:    e8 8a fe ff ff     call 400970 <_ZNSirsERi@plt>
400ae6:    48 8d 55 a8     lea rdx,[rbp-0x58]
400aea:    48 89 d6     mov rsi,rdx
400aed:    48 89 c7     mov rdi,rax
400af0:    e8 7b fe ff ff     call 400970 <_ZNSirsERi@plt>
400af5:    48 8d 55 a4     lea rdx,[rbp-0x5c]
400af9:    48 89 d6     mov rsi,rdx
400afc:    48 89 c7     mov rdi,rax
400aff:    e8 6c fe ff ff     call 400970 <_ZNSirsERi@plt>
400b04:    8b 45 ac     mov eax,DWORD PTR [rbp-0x54]
400b07:    83 c0 02     add eax,0x2
400b0a:    48 98     cdqe
400b0c:    48 c1 e0 03     shl rax,0x3
400b10:    48 89 c7     mov rdi,rax
400b13:    e8 f8 fd ff ff     call 400910 <_Znam@plt>
400b18:    48 89 45 c0     mov QWORD PTR [rbp-0x40],rax
400b1c:    c7 45 ec 00 00 00 00     mov DWORD PTR [rbp-0x14],0x0
400b23:    eb 30     jmp 400b55 <main+0x89>
400b25:    8b 45 ec     mov eax,DWORD PTR [rbp-0x14]
400b28:    48 98     cdqe
400b2a:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400b31:    00
400b32:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400b36:    48 8d 1c 02     lea rbx,[rdx+rax*1]
400b3a:    8b 45 a8     mov eax,DWORD PTR [rbp-0x58]
400b3d:    83 c0 02     add eax,0x2
400b40:    48 98     cdqe
400b42:    48 c1 e0 02     shl rax,0x2
400b46:    48 89 c7     mov rdi,rax
400b49:    e8 c2 fd ff ff     call 400910 <_Znam@plt>
400b4e:    48 89 03     mov QWORD PTR [rbx],rax
400b51:    83 45 ec 01     add DWORD PTR [rbp-0x14],0x1
400b55:    8b 45 ac     mov eax,DWORD PTR [rbp-0x54]
400b58:    83 c0 01     add eax,0x1
400b5b:    3b 45 ec     cmp eax,DWORD PTR [rbp-0x14]
400b5e:    0f 9d c0     setge al
400b61:    84 c0     test al,al
400b63:    75 c0     jne 400b25 <main+0x59>
400b65:    c7 45 e8 00 00 00 00     mov DWORD PTR [rbp-0x18],0x0
400b6c:    eb 4b     jmp 400bb9 <main+0xed>
400b6e:    c7 45 e4 00 00 00 00     mov DWORD PTR [rbp-0x1c],0x0
400b75:    eb 2e     jmp 400ba5 <main+0xd9>
400b77:    8b 45 e8     mov eax,DWORD PTR [rbp-0x18]
400b7a:    48 98     cdqe
400b7c:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400b83:    00
400b84:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400b88:    48 01 d0     add rax,rdx
400b8b:    48 8b 00     mov rax,QWORD PTR [rax]
400b8e:    8b 55 e4     mov edx,DWORD PTR [rbp-0x1c]
400b91:    48 63 d2     movsxd rdx,edx
400b94:    48 c1 e2 02     shl rdx,0x2
400b98:    48 01 d0     add rax,rdx
400b9b:    c7 00 00 00 00 00     mov DWORD PTR [rax],0x0
400ba1:    83 45 e4 01     add DWORD PTR [rbp-0x1c],0x1
400ba5:    8b 45 a8     mov eax,DWORD PTR [rbp-0x58]
400ba8:    83 c0 01     add eax,0x1
400bab:    3b 45 e4     cmp eax,DWORD PTR [rbp-0x1c]
400bae:    0f 9d c0     setge al
400bb1:    84 c0     test al,al
400bb3:    75 c2     jne 400b77 <main+0xab>
400bb5:    83 45 e8 01     add DWORD PTR [rbp-0x18],0x1
400bb9:    8b 45 ac     mov eax,DWORD PTR [rbp-0x54]
400bbc:    83 c0 01     add eax,0x1
400bbf:    3b 45 e8     cmp eax,DWORD PTR [rbp-0x18]
400bc2:    0f 9d c0     setge al
400bc5:    84 c0     test al,al
400bc7:    75 a5     jne 400b6e <main+0xa2>
400bc9:    8b 45 a4     mov eax,DWORD PTR [rbp-0x5c]
400bcc:    83 c0 02     add eax,0x2
400bcf:    48 98     cdqe
400bd1:    48 c1 e0 02     shl rax,0x2
400bd5:    48 89 c7     mov rdi,rax
400bd8:    e8 33 fd ff ff     call 400910 <_Znam@plt>
400bdd:    48 89 45 b8     mov QWORD PTR [rbp-0x48],rax
400be1:    8b 45 a4     mov eax,DWORD PTR [rbp-0x5c]
400be4:    83 c0 02     add eax,0x2
400be7:    48 98     cdqe
400be9:    48 c1 e0 02     shl rax,0x2
400bed:    48 89 c7     mov rdi,rax
400bf0:    e8 1b fd ff ff     call 400910 <_Znam@plt>
400bf5:    48 89 45 b0     mov QWORD PTR [rbp-0x50],rax
400bf9:    c7 45 e0 01 00 00 00     mov DWORD PTR [rbp-0x20],0x1
400c00:    eb 46     jmp 400c48 <main+0x17c>
400c02:    8b 45 e0     mov eax,DWORD PTR [rbp-0x20]
400c05:    48 98     cdqe
400c07:    48 8d 14 85 00 00 00     lea rdx,[rax*4+0x0]
400c0e:    00
400c0f:    48 8b 45 b8     mov rax,QWORD PTR [rbp-0x48]
400c13:    48 01 d0     add rax,rdx
400c16:    48 89 c6     mov rsi,rax
400c19:    bf 60 17 60 00     mov edi,0x601760
400c1e:    e8 4d fd ff ff     call 400970 <_ZNSirsERi@plt>
400c23:    8b 45 e0     mov eax,DWORD PTR [rbp-0x20]
400c26:    48 98     cdqe
400c28:    48 8d 14 85 00 00 00     lea rdx,[rax*4+0x0]
400c2f:    00
400c30:    48 8b 45 b0     mov rax,QWORD PTR [rbp-0x50]
400c34:    48 01 d0     add rax,rdx
400c37:    48 89 c6     mov rsi,rax
400c3a:    bf 60 17 60 00     mov edi,0x601760
400c3f:    e8 2c fd ff ff     call 400970 <_ZNSirsERi@plt>
400c44:    83 45 e0 01     add DWORD PTR [rbp-0x20],0x1
400c48:    8b 45 a4     mov eax,DWORD PTR [rbp-0x5c]
400c4b:    39 45 e0     cmp DWORD PTR [rbp-0x20],eax
400c4e:    0f 9e c0     setle al
400c51:    84 c0     test al,al
400c53:    75 ad     jne 400c02 <main+0x136>
400c55:    c7 45 dc 01 00 00 00     mov DWORD PTR [rbp-0x24],0x1
400c5c:    eb 55     jmp 400cb3 <main+0x1e7>
400c5e:    8b 45 dc     mov eax,DWORD PTR [rbp-0x24]
400c61:    48 98     cdqe
400c63:    48 8d 14 85 00 00 00     lea rdx,[rax*4+0x0]
400c6a:    00
400c6b:    48 8b 45 b8     mov rax,QWORD PTR [rbp-0x48]
400c6f:    48 01 d0     add rax,rdx
400c72:    8b 00     mov eax,DWORD PTR [rax]
400c74:    48 98     cdqe
400c76:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400c7d:    00
400c7e:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400c82:    48 01 d0     add rax,rdx
400c85:    48 8b 00     mov rax,QWORD PTR [rax]
400c88:    8b 55 dc     mov edx,DWORD PTR [rbp-0x24]
400c8b:    48 63 d2     movsxd rdx,edx
400c8e:    48 8d 0c 95 00 00 00     lea rcx,[rdx*4+0x0]
400c95:    00
400c96:    48 8b 55 b0     mov rdx,QWORD PTR [rbp-0x50]
400c9a:    48 01 ca     add rdx,rcx
400c9d:    8b 12     mov edx,DWORD PTR [rdx]
400c9f:    48 63 d2     movsxd rdx,edx
400ca2:    48 c1 e2 02     shl rdx,0x2
400ca6:    48 01 d0     add rax,rdx
400ca9:    c7 00 ff ff ff ff     mov DWORD PTR [rax],0xffffffff
400caf:    83 45 dc 01     add DWORD PTR [rbp-0x24],0x1
400cb3:    8b 45 a4     mov eax,DWORD PTR [rbp-0x5c]
400cb6:    39 45 dc     cmp DWORD PTR [rbp-0x24],eax
400cb9:    0f 9e c0     setle al
400cbc:    84 c0     test al,al
400cbe:    75 9e     jne 400c5e <main+0x192>
400cc0:    c7 45 d8 01 00 00 00     mov DWORD PTR [rbp-0x28],0x1
400cc7:    e9 5d 04 00 00     jmp 401129 <main+0x65d>
400ccc:    c7 45 d4 01 00 00 00     mov DWORD PTR [rbp-0x2c],0x1
400cd3:    e9 3c 04 00 00     jmp 401114 <main+0x648>
400cd8:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400cdb:    48 98     cdqe
400cdd:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400ce4:    00
400ce5:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400ce9:    48 01 d0     add rax,rdx
400cec:    48 8b 00     mov rax,QWORD PTR [rax]
400cef:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400cf2:    48 63 d2     movsxd rdx,edx
400cf5:    48 83 c2 01     add rdx,0x1
400cf9:    48 c1 e2 02     shl rdx,0x2
400cfd:    48 01 d0     add rax,rdx
400d00:    8b 00     mov eax,DWORD PTR [rax]
400d02:    83 f8 ff     cmp eax,0xffffffff
400d05:    75 56     jne 400d5d <main+0x291>
400d07:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400d0a:    48 98     cdqe
400d0c:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400d13:    00
400d14:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400d18:    48 01 d0     add rax,rdx
400d1b:    48 8b 00     mov rax,QWORD PTR [rax]
400d1e:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400d21:    48 63 d2     movsxd rdx,edx
400d24:    48 c1 e2 02     shl rdx,0x2
400d28:    48 01 d0     add rax,rdx
400d2b:    8b 00     mov eax,DWORD PTR [rax]
400d2d:    83 f8 ff     cmp eax,0xffffffff
400d30:    74 2b     je 400d5d <main+0x291>
400d32:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400d35:    48 98     cdqe
400d37:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400d3e:    00
400d3f:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400d43:    48 01 d0     add rax,rdx
400d46:    48 8b 00     mov rax,QWORD PTR [rax]
400d49:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400d4c:    48 63 d2     movsxd rdx,edx
400d4f:    48 c1 e2 02     shl rdx,0x2
400d53:    48 01 d0     add rax,rdx
400d56:    8b 10     mov edx,DWORD PTR [rax]
400d58:    83 c2 01     add edx,0x1
400d5b:    89 10     mov DWORD PTR [rax],edx
400d5d:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400d60:    48 98     cdqe
400d62:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400d69:    00
400d6a:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400d6e:    48 01 d0     add rax,rdx
400d71:    48 8b 00     mov rax,QWORD PTR [rax]
400d74:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400d77:    48 63 d2     movsxd rdx,edx
400d7a:    48 83 ea 01     sub rdx,0x1
400d7e:    48 c1 e2 02     shl rdx,0x2
400d82:    48 01 d0     add rax,rdx
400d85:    8b 00     mov eax,DWORD PTR [rax]
400d87:    83 f8 ff     cmp eax,0xffffffff
400d8a:    75 56     jne 400de2 <main+0x316>
400d8c:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400d8f:    48 98     cdqe
400d91:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400d98:    00
400d99:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400d9d:    48 01 d0     add rax,rdx
400da0:    48 8b 00     mov rax,QWORD PTR [rax]
400da3:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400da6:    48 63 d2     movsxd rdx,edx
400da9:    48 c1 e2 02     shl rdx,0x2
400dad:    48 01 d0     add rax,rdx
400db0:    8b 00     mov eax,DWORD PTR [rax]
400db2:    83 f8 ff     cmp eax,0xffffffff
400db5:    74 2b     je 400de2 <main+0x316>
400db7:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400dba:    48 98     cdqe
400dbc:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400dc3:    00
400dc4:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400dc8:    48 01 d0     add rax,rdx
400dcb:    48 8b 00     mov rax,QWORD PTR [rax]
400dce:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400dd1:    48 63 d2     movsxd rdx,edx
400dd4:    48 c1 e2 02     shl rdx,0x2
400dd8:    48 01 d0     add rax,rdx
400ddb:    8b 10     mov edx,DWORD PTR [rax]
400ddd:    83 c2 01     add edx,0x1
400de0:    89 10     mov DWORD PTR [rax],edx
400de2:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400de5:    48 98     cdqe
400de7:    48 83 c0 01     add rax,0x1
400deb:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400df2:    00
400df3:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400df7:    48 01 d0     add rax,rdx
400dfa:    48 8b 00     mov rax,QWORD PTR [rax]
400dfd:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400e00:    48 63 d2     movsxd rdx,edx
400e03:    48 83 c2 01     add rdx,0x1
400e07:    48 c1 e2 02     shl rdx,0x2
400e0b:    48 01 d0     add rax,rdx
400e0e:    8b 00     mov eax,DWORD PTR [rax]
400e10:    83 f8 ff     cmp eax,0xffffffff
400e13:    75 56     jne 400e6b <main+0x39f>
400e15:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400e18:    48 98     cdqe
400e1a:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400e21:    00
400e22:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400e26:    48 01 d0     add rax,rdx
400e29:    48 8b 00     mov rax,QWORD PTR [rax]
400e2c:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400e2f:    48 63 d2     movsxd rdx,edx
400e32:    48 c1 e2 02     shl rdx,0x2
400e36:    48 01 d0     add rax,rdx
400e39:    8b 00     mov eax,DWORD PTR [rax]
400e3b:    83 f8 ff     cmp eax,0xffffffff
400e3e:    74 2b     je 400e6b <main+0x39f>
400e40:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400e43:    48 98     cdqe
400e45:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400e4c:    00
400e4d:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400e51:    48 01 d0     add rax,rdx
400e54:    48 8b 00     mov rax,QWORD PTR [rax]
400e57:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400e5a:    48 63 d2     movsxd rdx,edx
400e5d:    48 c1 e2 02     shl rdx,0x2
400e61:    48 01 d0     add rax,rdx
400e64:    8b 10     mov edx,DWORD PTR [rax]
400e66:    83 c2 01     add edx,0x1
400e69:    89 10     mov DWORD PTR [rax],edx
400e6b:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400e6e:    48 98     cdqe
400e70:    48 83 e8 01     sub rax,0x1
400e74:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400e7b:    00
400e7c:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400e80:    48 01 d0     add rax,rdx
400e83:    48 8b 00     mov rax,QWORD PTR [rax]
400e86:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400e89:    48 63 d2     movsxd rdx,edx
400e8c:    48 83 ea 01     sub rdx,0x1
400e90:    48 c1 e2 02     shl rdx,0x2
400e94:    48 01 d0     add rax,rdx
400e97:    8b 00     mov eax,DWORD PTR [rax]
400e99:    83 f8 ff     cmp eax,0xffffffff
400e9c:    75 56     jne 400ef4 <main+0x428>
400e9e:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400ea1:    48 98     cdqe
400ea3:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400eaa:    00
400eab:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400eaf:    48 01 d0     add rax,rdx
400eb2:    48 8b 00     mov rax,QWORD PTR [rax]
400eb5:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400eb8:    48 63 d2     movsxd rdx,edx
400ebb:    48 c1 e2 02     shl rdx,0x2
400ebf:    48 01 d0     add rax,rdx
400ec2:    8b 00     mov eax,DWORD PTR [rax]
400ec4:    83 f8 ff     cmp eax,0xffffffff
400ec7:    74 2b     je 400ef4 <main+0x428>
400ec9:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400ecc:    48 98     cdqe
400ece:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400ed5:    00
400ed6:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400eda:    48 01 d0     add rax,rdx
400edd:    48 8b 00     mov rax,QWORD PTR [rax]
400ee0:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400ee3:    48 63 d2     movsxd rdx,edx
400ee6:    48 c1 e2 02     shl rdx,0x2
400eea:    48 01 d0     add rax,rdx
400eed:    8b 10     mov edx,DWORD PTR [rax]
400eef:    83 c2 01     add edx,0x1
400ef2:    89 10     mov DWORD PTR [rax],edx
400ef4:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400ef7:    48 98     cdqe
400ef9:    48 83 e8 01     sub rax,0x1
400efd:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400f04:    00
400f05:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400f09:    48 01 d0     add rax,rdx
400f0c:    48 8b 00     mov rax,QWORD PTR [rax]
400f0f:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400f12:    48 63 d2     movsxd rdx,edx
400f15:    48 c1 e2 02     shl rdx,0x2
400f19:    48 01 d0     add rax,rdx
400f1c:    8b 00     mov eax,DWORD PTR [rax]
400f1e:    83 f8 ff     cmp eax,0xffffffff
400f21:    75 56     jne 400f79 <main+0x4ad>
400f23:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400f26:    48 98     cdqe
400f28:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400f2f:    00
400f30:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400f34:    48 01 d0     add rax,rdx
400f37:    48 8b 00     mov rax,QWORD PTR [rax]
400f3a:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400f3d:    48 63 d2     movsxd rdx,edx
400f40:    48 c1 e2 02     shl rdx,0x2
400f44:    48 01 d0     add rax,rdx
400f47:    8b 00     mov eax,DWORD PTR [rax]
400f49:    83 f8 ff     cmp eax,0xffffffff
400f4c:    74 2b     je 400f79 <main+0x4ad>
400f4e:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400f51:    48 98     cdqe
400f53:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400f5a:    00
400f5b:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400f5f:    48 01 d0     add rax,rdx
400f62:    48 8b 00     mov rax,QWORD PTR [rax]
400f65:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400f68:    48 63 d2     movsxd rdx,edx
400f6b:    48 c1 e2 02     shl rdx,0x2
400f6f:    48 01 d0     add rax,rdx
400f72:    8b 10     mov edx,DWORD PTR [rax]
400f74:    83 c2 01     add edx,0x1
400f77:    89 10     mov DWORD PTR [rax],edx
400f79:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400f7c:    48 98     cdqe
400f7e:    48 83 c0 01     add rax,0x1
400f82:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400f89:    00
400f8a:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400f8e:    48 01 d0     add rax,rdx
400f91:    48 8b 00     mov rax,QWORD PTR [rax]
400f94:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400f97:    48 63 d2     movsxd rdx,edx
400f9a:    48 c1 e2 02     shl rdx,0x2
400f9e:    48 01 d0     add rax,rdx
400fa1:    8b 00     mov eax,DWORD PTR [rax]
400fa3:    83 f8 ff     cmp eax,0xffffffff
400fa6:    75 56     jne 400ffe <main+0x532>
400fa8:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400fab:    48 98     cdqe
400fad:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400fb4:    00
400fb5:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400fb9:    48 01 d0     add rax,rdx
400fbc:    48 8b 00     mov rax,QWORD PTR [rax]
400fbf:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400fc2:    48 63 d2     movsxd rdx,edx
400fc5:    48 c1 e2 02     shl rdx,0x2
400fc9:    48 01 d0     add rax,rdx
400fcc:    8b 00     mov eax,DWORD PTR [rax]
400fce:    83 f8 ff     cmp eax,0xffffffff
400fd1:    74 2b     je 400ffe <main+0x532>
400fd3:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
400fd6:    48 98     cdqe
400fd8:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
400fdf:    00
400fe0:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
400fe4:    48 01 d0     add rax,rdx
400fe7:    48 8b 00     mov rax,QWORD PTR [rax]
400fea:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
400fed:    48 63 d2     movsxd rdx,edx
400ff0:    48 c1 e2 02     shl rdx,0x2
400ff4:    48 01 d0     add rax,rdx
400ff7:    8b 10     mov edx,DWORD PTR [rax]
400ff9:    83 c2 01     add edx,0x1
400ffc:    89 10     mov DWORD PTR [rax],edx
400ffe:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
401001:    48 98     cdqe
401003:    48 83 e8 01     sub rax,0x1
401007:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
40100e:    00
40100f:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
401013:    48 01 d0     add rax,rdx
401016:    48 8b 00     mov rax,QWORD PTR [rax]
401019:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
40101c:    48 63 d2     movsxd rdx,edx
40101f:    48 83 c2 01     add rdx,0x1
401023:    48 c1 e2 02     shl rdx,0x2
401027:    48 01 d0     add rax,rdx
40102a:    8b 00     mov eax,DWORD PTR [rax]
40102c:    83 f8 ff     cmp eax,0xffffffff
40102f:    75 56     jne 401087 <main+0x5bb>
401031:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
401034:    48 98     cdqe
401036:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
40103d:    00
40103e:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
401042:    48 01 d0     add rax,rdx
401045:    48 8b 00     mov rax,QWORD PTR [rax]
401048:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
40104b:    48 63 d2     movsxd rdx,edx
40104e:    48 c1 e2 02     shl rdx,0x2
401052:    48 01 d0     add rax,rdx
401055:    8b 00     mov eax,DWORD PTR [rax]
401057:    83 f8 ff     cmp eax,0xffffffff
40105a:    74 2b     je 401087 <main+0x5bb>
40105c:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
40105f:    48 98     cdqe
401061:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
401068:    00
401069:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
40106d:    48 01 d0     add rax,rdx
401070:    48 8b 00     mov rax,QWORD PTR [rax]
401073:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
401076:    48 63 d2     movsxd rdx,edx
401079:    48 c1 e2 02     shl rdx,0x2
40107d:    48 01 d0     add rax,rdx
401080:    8b 10     mov edx,DWORD PTR [rax]
401082:    83 c2 01     add edx,0x1
401085:    89 10     mov DWORD PTR [rax],edx
401087:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
40108a:    48 98     cdqe
40108c:    48 83 c0 01     add rax,0x1
401090:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
401097:    00
401098:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
40109c:    48 01 d0     add rax,rdx
40109f:    48 8b 00     mov rax,QWORD PTR [rax]
4010a2:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
4010a5:    48 63 d2     movsxd rdx,edx
4010a8:    48 83 ea 01     sub rdx,0x1
4010ac:    48 c1 e2 02     shl rdx,0x2
4010b0:    48 01 d0     add rax,rdx
4010b3:    8b 00     mov eax,DWORD PTR [rax]
4010b5:    83 f8 ff     cmp eax,0xffffffff
4010b8:    75 56     jne 401110 <main+0x644>
4010ba:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
4010bd:    48 98     cdqe
4010bf:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
4010c6:    00
4010c7:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
4010cb:    48 01 d0     add rax,rdx
4010ce:    48 8b 00     mov rax,QWORD PTR [rax]
4010d1:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
4010d4:    48 63 d2     movsxd rdx,edx
4010d7:    48 c1 e2 02     shl rdx,0x2
4010db:    48 01 d0     add rax,rdx
4010de:    8b 00     mov eax,DWORD PTR [rax]
4010e0:    83 f8 ff     cmp eax,0xffffffff
4010e3:    74 2b     je 401110 <main+0x644>
4010e5:    8b 45 d8     mov eax,DWORD PTR [rbp-0x28]
4010e8:    48 98     cdqe
4010ea:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
4010f1:    00
4010f2:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
4010f6:    48 01 d0     add rax,rdx
4010f9:    48 8b 00     mov rax,QWORD PTR [rax]
4010fc:    8b 55 d4     mov edx,DWORD PTR [rbp-0x2c]
4010ff:    48 63 d2     movsxd rdx,edx
401102:    48 c1 e2 02     shl rdx,0x2
401106:    48 01 d0     add rax,rdx
401109:    8b 10     mov edx,DWORD PTR [rax]
40110b:    83 c2 01     add edx,0x1
40110e:    89 10     mov DWORD PTR [rax],edx
401110:    83 45 d4 01     add DWORD PTR [rbp-0x2c],0x1
401114:    8b 45 a8     mov eax,DWORD PTR [rbp-0x58]
401117:    39 45 d4     cmp DWORD PTR [rbp-0x2c],eax
40111a:    0f 9e c0     setle al
40111d:    84 c0     test al,al
40111f:    0f 85 b3 fb ff ff     jne 400cd8 <main+0x20c>
401125:    83 45 d8 01     add DWORD PTR [rbp-0x28],0x1
401129:    8b 45 ac     mov eax,DWORD PTR [rbp-0x54]
40112c:    39 45 d8     cmp DWORD PTR [rbp-0x28],eax
40112f:    0f 9e c0     setle al
401132:    84 c0     test al,al
401134:    0f 85 92 fb ff ff     jne 400ccc <main+0x200>
40113a:    c7 45 d0 01 00 00 00     mov DWORD PTR [rbp-0x30],0x1
401141:    e9 bc 00 00 00     jmp 401202 <main+0x736>
401146:    c7 45 cc 01 00 00 00     mov DWORD PTR [rbp-0x34],0x1
40114d:    e9 8c 00 00 00     jmp 4011de <main+0x712>
401152:    8b 45 d0     mov eax,DWORD PTR [rbp-0x30]
401155:    48 98     cdqe
401157:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
40115e:    00
40115f:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
401163:    48 01 d0     add rax,rdx
401166:    48 8b 00     mov rax,QWORD PTR [rax]
401169:    8b 55 cc     mov edx,DWORD PTR [rbp-0x34]
40116c:    48 63 d2     movsxd rdx,edx
40116f:    48 c1 e2 02     shl rdx,0x2
401173:    48 01 d0     add rax,rdx
401176:    8b 00     mov eax,DWORD PTR [rax]
401178:    83 f8 ff     cmp eax,0xffffffff
40117b:    75 1e     jne 40119b <main+0x6cf>
40117d:    be 3c 13 40 00     mov esi,0x40133c
401182:    bf 80 18 60 00     mov edi,0x601880
401187:    e8 d4 f7 ff ff     call 400960 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
40118c:    be 3e 13 40 00     mov esi,0x40133e
401191:    48 89 c7     mov rdi,rax
401194:    e8 c7 f7 ff ff     call 400960 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
401199:    eb 3f     jmp 4011da <main+0x70e>
40119b:    8b 45 d0     mov eax,DWORD PTR [rbp-0x30]
40119e:    48 98     cdqe
4011a0:    48 8d 14 c5 00 00 00     lea rdx,[rax*8+0x0]
4011a7:    00
4011a8:    48 8b 45 c0     mov rax,QWORD PTR [rbp-0x40]
4011ac:    48 01 d0     add rax,rdx
4011af:    48 8b 00     mov rax,QWORD PTR [rax]
4011b2:    8b 55 cc     mov edx,DWORD PTR [rbp-0x34]
4011b5:    48 63 d2     movsxd rdx,edx
4011b8:    48 c1 e2 02     shl rdx,0x2
4011bc:    48 01 d0     add rax,rdx
4011bf:    8b 00     mov eax,DWORD PTR [rax]
4011c1:    89 c6     mov esi,eax
4011c3:    bf 80 18 60 00     mov edi,0x601880
4011c8:    e8 33 f7 ff ff     call 400900 <_ZNSolsEi@plt>
4011cd:    be 3e 13 40 00     mov esi,0x40133e
4011d2:    48 89 c7     mov rdi,rax
4011d5:    e8 86 f7 ff ff     call 400960 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
4011da:    83 45 cc 01     add DWORD PTR [rbp-0x34],0x1
4011de:    8b 45 a8     mov eax,DWORD PTR [rbp-0x58]
4011e1:    39 45 cc     cmp DWORD PTR [rbp-0x34],eax
4011e4:    0f 9e c0     setle al
4011e7:    84 c0     test al,al
4011e9:    0f 85 63 ff ff ff     jne 401152 <main+0x686>
4011ef:    be 90 09 40 00     mov esi,0x400990
4011f4:    bf 80 18 60 00     mov edi,0x601880
4011f9:    e8 82 f7 ff ff     call 400980 <_ZNSolsEPFRSoS_E@plt>
4011fe:    83 45 d0 01     add DWORD PTR [rbp-0x30],0x1
401202:    8b 45 ac     mov eax,DWORD PTR [rbp-0x54]
401205:    39 45 d0     cmp DWORD PTR [rbp-0x30],eax
401208:    0f 9e c0     setle al
40120b:    84 c0     test al,al
40120d:    0f 85 33 ff ff ff     jne 401146 <main+0x67a>
401213:    48 8d 45 ac     lea rax,[rbp-0x54]
401217:    48 89 c6     mov rsi,rax
40121a:    bf 60 17 60 00     mov edi,0x601760
40121f:    e8 4c f7 ff ff     call 400970 <_ZNSirsERi@plt>
401224:    b8 00 00 00 00     mov eax,0x0
401229:    eb 08     jmp 401233 <main+0x767>
40122b:    48 89 c7     mov rdi,rax
40122e:    e8 7d f7 ff ff     call 4009b0 <_Unwind_Resume@plt>
401233:    48 83 c4 58     add rsp,0x58
401237:    5b     pop rbx
401238:    5d     pop rbp
401239:    c3     ret

000000000040123a <_Z41__static_initialization_and_destruction_0ii>:
40123a:    55     push rbp
40123b:    48 89 e5     mov rbp,rsp
40123e:    48 83 ec 10     sub rsp,0x10
401242:    89 7d fc     mov DWORD PTR [rbp-0x4],edi
401245:    89 75 f8     mov DWORD PTR [rbp-0x8],esi
401248:    83 7d fc 01     cmp DWORD PTR [rbp-0x4],0x1
40124c:    75 27     jne 401275 <_Z41__static_initialization_and_destruction_0ii+0x3b>
40124e:    81 7d f8 ff ff 00 00     cmp DWORD PTR [rbp-0x8],0xffff
401255:    75 1e     jne 401275 <_Z41__static_initialization_and_destruction_0ii+0x3b>
401257:    bf 94 19 60 00     mov edi,0x601994
40125c:    e8 bf f6 ff ff     call 400920 <_ZNSt8ios_base4InitC1Ev@plt>
401261:    ba 58 17 60 00     mov edx,0x601758
401266:    be 94 19 60 00     mov esi,0x601994
40126b:    bf 50 09 40 00     mov edi,0x400950
401270:    e8 cb f6 ff ff     call 400940 <__cxa_atexit@plt>
401275:    c9     leave
401276:    c3     ret

0000000000401277 <_GLOBAL__sub_I_main>:
401277:    55     push rbp
401278:    48 89 e5     mov rbp,rsp
40127b:    be ff ff 00 00     mov esi,0xffff
401280:    bf 01 00 00 00     mov edi,0x1
401285:    e8 b0 ff ff ff     call 40123a <_Z41__static_initialization_and_destruction_0ii>
40128a:    5d     pop rbp
40128b:    c3     ret
40128c:    90     nop
40128d:    90     nop
40128e:    90     nop
40128f:    90     nop

0000000000401290 <__libc_csu_fini>:
401290:    f3 c3     repz ret
401292:    66 66 66 66 66 2e 0f     data32 data32 data32 data32 nop WORD PTR cs:[rax+rax*1+0x0]
401299:    1f 84 00 00 00 00 00

00000000004012a0 <__libc_csu_init>:
4012a0:    48 89 6c 24 d8     mov QWORD PTR [rsp-0x28],rbp
4012a5:    4c 89 64 24 e0     mov QWORD PTR [rsp-0x20],r12
4012aa:    48 8d 2d ff 01 20 00     lea rbp,[rip+0x2001ff] # 6014b0 <__init_array_end>
4012b1:    4c 8d 25 e8 01 20 00     lea r12,[rip+0x2001e8] # 6014a0 <__frame_dummy_init_array_entry>
4012b8:    4c 89 6c 24 e8     mov QWORD PTR [rsp-0x18],r13
4012bd:    4c 89 74 24 f0     mov QWORD PTR [rsp-0x10],r14
4012c2:    4c 89 7c 24 f8     mov QWORD PTR [rsp-0x8],r15
4012c7:    48 89 5c 24 d0     mov QWORD PTR [rsp-0x30],rbx
4012cc:    48 83 ec 38     sub rsp,0x38
4012d0:    4c 29 e5     sub rbp,r12
4012d3:    41 89 fd     mov r13d,edi
4012d6:    49 89 f6     mov r14,rsi
4012d9:    48 c1 fd 03     sar rbp,0x3
4012dd:    49 89 d7     mov r15,rdx
4012e0:    e8 f3 f5 ff ff     call 4008d8 <_init>
4012e5:    48 85 ed     test rbp,rbp
4012e8:    74 1c     je 401306 <__libc_csu_init+0x66>
4012ea:    31 db     xor ebx,ebx
4012ec:    0f 1f 40 00     nop DWORD PTR [rax+0x0]
4012f0:    4c 89 fa     mov rdx,r15
4012f3:    4c 89 f6     mov rsi,r14
4012f6:    44 89 ef     mov edi,r13d
4012f9:    41 ff 14 dc     call QWORD PTR [r12+rbx*8]
4012fd:    48 83 c3 01     add rbx,0x1
401301:    48 39 eb     cmp rbx,rbp
401304:    72 ea     jb 4012f0 <__libc_csu_init+0x50>
401306:    48 8b 5c 24 08     mov rbx,QWORD PTR [rsp+0x8]
40130b:    48 8b 6c 24 10     mov rbp,QWORD PTR [rsp+0x10]
401310:    4c 8b 64 24 18     mov r12,QWORD PTR [rsp+0x18]
401315:    4c 8b 6c 24 20     mov r13,QWORD PTR [rsp+0x20]
40131a:    4c 8b 74 24 28     mov r14,QWORD PTR [rsp+0x28]
40131f:    4c 8b 7c 24 30     mov r15,QWORD PTR [rsp+0x30]
401324:    48 83 c4 38     add rsp,0x38
401328:    c3     ret
401329:    90     nop
40132a:    90     nop
40132b:    90     nop

Disassembly of section .fini:

000000000040132c <_fini>:
40132c:    48 83 ec 08     sub rsp,0x8
401330:    48 83 c4 08     add rsp,0x8
401334:    c3     ret [/more]
Автор: akaGM
Дата сообщения: 25.05.2014 02:33
:)
Автор: SkyRE
Дата сообщения: 28.05.2014 18:12
a3ro
Приколист вы Однако!
Автор: MERCURY127
Дата сообщения: 28.05.2014 21:46
a3ro, вы нам предлагаете в уме реверснуть оптимизированный С++ код? попробуйте ИДА Про, там есть модули для этого, иногда помогает...
Автор: SkyRE
Дата сообщения: 29.05.2014 14:00
Это файл для Линукс, т.к. х86_64 то вряд-ли андроид.
В начале идёт таблица вызовов.
Большая часть это служебные функции gcc 1, 2
Автор: ne_viens
Дата сообщения: 29.05.2014 19:15
Там примерно такое: [more][code]#include <iostream>
using namespace std;

int main()
{
    int x, y, z;
    
    cin >> x;
    cin >> y;
    cin >> z;

    int** ptr = new int*[x + 2];
    for(int i = 0; i < x; ++i)
        ptr[i] = new int[y + 2];
    
    for(int j = 0; j < x; ++j)
        for(int i = 0; i < y; ++i)
            ptr[j][i] = 0;

    int* pInt1 = new int[z + 2];
    int* pInt2 = new int[z + 2];
    
    for(int i = 1; i <= z; ++i)
    {
        cin >> pInt1[i];
        cin >> pInt2[i];
    }
    
    for(int i = 1; i <= z; ++i)
        ptr[pInt1[i]][pInt2[i]] = -1;
    
    for(int j = 1; j <= x; ++j)
        for(int i = 1; i <= y; ++i)
        {
            if(ptr[j][i+1] == -1 && ptr[j][i] != -1)
                ++ptr[j][i];
            if(ptr[j][i-1] == -1 && ptr[j][i] != -1)
                ++ptr[j][i];
            if(ptr[j+1][i+1] == -1 && ptr[j][i] != -1)
                ++ptr[j][i];
            if(ptr[j-1][i-1] == -1 && ptr[j][i] != -1)
                ++ptr[j][i];
            if(ptr[j-1][i] == -1 && ptr[j][i] != -1)
                ++ptr[j][i];
            if(ptr[j+1][i] == -1 && ptr[j][i] != -1)
                ++ptr[j][i];
            if(ptr[j-1][i+1] == -1 && ptr[j][i] != -1)
                ++ptr[j][i];
            if(ptr[j+1][i-1] == -1 && ptr[j][i] != -1)
                ++ptr[j][i];
        }
        
    for(int j = 1; j <= x; ++j)
    {
        for(int i = 1; i <= y; ++i)
            if(ptr[j][i] == -1)
            {
                cout << "Print some string @addr 0x40133c";
                cout << "Print some string @addr 0x40133e";
            }
            else
            {
                cout << ptr[j][i];
                cout << "Print some string @addr 0x40133e";
            }
        cout << "Print something @addr 0x400990";
    }

    cin >> x;
    return 0;
}
[/code][/more]
Автор: AZelensky
Дата сообщения: 02.06.2014 15:39
Уважаемые форумчане, имею задание:
Написать программу, производящую вычитание чисел произвольной размерности. Числа хранятся в виде массивов типа longint, где 0-й элемент массива - содержит младшие 32 бита числа (с 0-го по 31-й), следующий элемент массива с 32-го по 63-й и т. д.. Ввод-вывод данных чисел осуществлять из двоичных файлов (длина которых соответственно кратна 4-м).

Как можно реализовать это? Буду очень благодарен за это.
Нужно использовать Pascal с Ассемблерной вставкой
Автор: akaGM
Дата сообщения: 02.06.2014 17:27
AZelensky

может уже сам наваял чего?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.