+ Reply to Thread
Page 1 of 3 1 2 3 LastLast
Results 1 to 20 of 44

Thread: Интересные куски кода (короткие) + много общения

  1. #1
    Darwin's Avatar

    Default Интересные куски кода (короткие) + много общения

    Тема с чистыми листингами кода тут.

    Эта тема исключительно для обсуждения кода из выше указанной темы.

    Предлагаю делиться интересными кусками кода. Очень желательно короткими.

    Code: C/C++

    // Прототип
    void function(void* pointer);

    // Вызов функции
    function(
    ( // Используем оператор запятая, для установки данных по указателю
    *(int *)((char *)(pointer) + sizeof(int)) = (int)(1),
    *(int *)((char *)(pointer)) = (int)(2),

    // Передаем указатель функции
    pointer
    )
    );
    Last edited by root; 14-12-2013 at 13:10. Reason: Добавил ссылку на новую тему

  2. #2
    Izg0y's Avatar

    Default Re: Интересные куски кода (короткие)

    Ох ё!...

    2 Darwin а как такое читается то в принципе?
    ,--= Реальность - это костыль для тех, кто не имеет воображения =--,

  3. #3
    keyst0rke's Avatar

    Default Re: Интересные куски кода (короткие)

    Code:
    format PE GUI 4.0
    use32
    include 'win32ax.inc'
    
    .code
    
    program:
         ;call DetachDebugger
         invoke MessageBoxA,0,'Okay. Try to debug me now!','',0
         invoke ExitProcess,0
    	 ; push 747565          
    	 ; call ExitProcess      
    
    proc DetachDebugger
         xor eax,eax
         mov edx,[fs:eax+0x30] ; TEB.Peb
         mov ecx,[edx+0x0c]    ; PEB.Ldr
         jecxz .win9x
         mov eax,[edx+0xa4]    ; PEB.OSMajorVersion
         shl eax,2
         add eax,[edx+0xa8]    ; PEB.OSMinorVersion
         call @f
    @@:  pop edx
         add edx,.nt_syscall_table-@b
         movzx eax,word[edx+(eax-16)*2]
         xor ecx,ecx
         push ecx
         push ecx
         push 17
         push -2
         call @f
    @@:  add dword [esp],@f-@b
         lea edx,[esp+4]
         int 0x2e
    @@:  add esp,20
         ret
    .nt_syscall_table:
         dw 0x00a5,\
    	0,\
    	0,\
    	0,\
    	0x00c7,\
    	0x00e5,\
    	0x00ee,\
    	0,\
    	0x0133,\
    	0x014f,\
    	0,\
    	0,\
    	0,\
    	0,\
    	0,\
    	0,\
    	0
    .win9x:
         ret
    endp
    
    proc callback,handle,reason,reserved
         cmp [reason],DLL_PROCESS_ATTACH
         jnz @f
         call DetachDebugger
    @@:  ret
    endp
    
    .data
    
    tls_index dd 0
    
    tls_callbacks:
         dd callback
         dd 0
    
    data 9		      ; TLS Directory
         dd 0	      ; StartAddressOfRawData
         dd 0	      ; EndAddressOfRawData
         dd tls_index     ; AddressOfIndex
         dd tls_callbacks ; AddressOfCallBacks
         dd 0	      ; SizeOfZeroFill
         dd 0	      ; Characteristics
    end data
    
    .end program
    Писал скорее всего не я (так как даже не понял с первого взгляда что это).
    Антиотладочный трюк. Синтаксис fasm.
    А вообще, если кому нужно, я могу выложить пару сотен подобных сниппетов. У меня много, бОльшая часть на ассемблере (fasm). Только не могу вспомнить куда я их скинул.
    Делай то, что должен. Дальше будь, что будет.
    (с) Дед

  4. #4
    JKornev's Avatar

    Default Re: Интересные куски кода (короткие)

    Да кучу таких Сишных хаков уже описаны Крисом, да и за такой код могут руки поотрывать

  5. #5
    Darwin's Avatar

    Default Re: Интересные куски кода (короткие)

    2 Darwin а как такое читается то в принципе?
    Я сам не сразу понял, пока не посмотрел на прототип функции ))

    Чтобы было понятно, вот упрощенная конструкция:

    Code: C/C++
    // здесь "a" будет присвоено "d"
    a = (b, c, d)

    // конструкция a = (b, c, d) раскрывается так
    (((a = b) = c) = d)

    Да кучу таких Сишных хаков уже описаны Крисом
    Не все Криса читают (по крайней мере полностью). Я, например, его сишных хаков не видел.

    да и за такой код могут руки поотрывать
    Всё зависит от места применения.

  6. #6
    Dark Koder's Avatar

    Default Re: Интересные куски кода (короткие)

    код рассчитан на понимающего человека, а не на новичка, так что без обид)
    З.Ы: такие вот подобные вкусности видел в книге Страуструпа (специздание),там поясняется что и как такие вот конструкции делают.
    Magicus Technicus
    Магистр Кодерус


  7. #7
    JKornev's Avatar

    Default Re: Интересные куски кода (короткие)

    Dark Koder любой маломальски повидавший реальные проекты программист с\с++ не станет лишний раз гадить в код коллегам "тюнингованными фитчами", которые трудно читаемы и не оправданы, без обид. Или вы можете обосновать применимость данной конструкции в контексте примера из первого поста?

  8. #8
    keyst0rke's Avatar

    Default Re: Интересные куски кода (короткие)

    Без обид, но сразу становится понятно, что ты никогда не занимался фрилансом. По крайней мере в этой сфере деятельности - чем не понятнее и индусее код, тем выше шансы, что работодатель вам как минимум заплатит))
    UDP. Ну и за поддержку нехило выложится (-:
    Делай то, что должен. Дальше будь, что будет.
    (с) Дед

  9. #9
    JKornev's Avatar

    Default Re: Интересные куски кода (короткие)

    Без обид, но сразу становится понятно, что ты никогда не занимался фрилансом.
    Никаких обид на необоснованную критику не держу

    По крайней мере в этой сфере деятельности - чем не понятнее и индусее код, тем выше шансы, что работодатель вам как минимум заплатит))
    Извините, но это действительно смешно) Вот когда поработаете с группой разработчиков, тогда и говорите про уместность таких хаков. Если вам приходилось писать говнокод только для того чтобы вам заплатили за проект, то я вам могу только посочувствовать и это не показатель. Программист умеющий писать легкий и простой код, вот это показатель.
    Last edited by JKornev; 11-12-2013 at 16:21.

  10. #10
    keyst0rke's Avatar

    Default Re: Интересные куски кода (короткие)

    Эм... ну почему же говнокод? В команде системных разработчиков я никогда не работал, да и не писал десктопных программ на коммерческой основе.
    А вот веб разработкой занимался. Причём в команде. Писали проект, потом его обфусцировали, ничего постыдного в этом я не вижу и тем более смешного, разумнее делать проект и хранить исходный код только у его авторов, иначе "авторов" станет больше (-:
    В подобных случаях, я бы офусцировал и исходный код десктопного приложения, который отдаю заказчику, но к счастью или сожалению, распутать можно любую обфускацию, а использование вот таких вот хаков, как раз таки и портит жизнь не чистым на руку людям.
    Оффтоп
    Делай то, что должен. Дальше будь, что будет.
    (с) Дед

  11. #11
    Darwin's Avatar

    Default Re: Интересные куски кода (короткие)

    Или вы можете обосновать применимость данной конструкции в контексте примера из первого поста?
    Обоснование: Необходимо автоматически создавать структуры с произвольным набором элементов. Это код из обфускатора.

    Как я уже сказал, всему своё место. Некоторые проекты могут требовать вообще мазохистских хаков, например, реализовать поддержку классов на чистом Си.

  12. #12
    JKornev's Avatar

    Default Re: Интересные куски кода (короткие)

    Вот если что статьи от Криса про трюки с С, всякие триграфы и пр. извращения включены
    http://forum.insidepro.com/viewtopic.php?t=764

    В подобных случаях, я бы офусцировал и исходный код десктопного приложения, который отдаю заказчику, но к счастью или сожалению, распутать можно любую обфускацию, а использование вот таких вот хаков, как раз таки и портит жизнь не чистым на руку людям.
    Чёт не пойму я вас, отдаёте исходник заказчику, зачем его обфусцировать? Да и вообще какой смысл это делать с исходником на С\С++?

  13. 2 пользователя(ей) сказали cпасибо:
    Dark Koder (12-12-2013) Darwin (12-12-2013)
  14. #13
    JKornev's Avatar

    Default Re: Интересные куски кода (короткие)

    Как я уже сказал, всему своё место. Некоторые проекты могут требовать вообще мазохистских хаков, например, реализовать поддержку классов на чистом Си.
    А про классы это не мазахизм, такие техники помоему еще в 90х применяли в GTK, а может и шас применяют, причем как говорят прогеры того времене достаточно удачно. Хотите изврат откройте MFC, хоть там и С++

    Но по поводу автоматического создания структур я не вкурил всёравно в чём выгода, если у вас есть живой код, то буду благодарен если зальёте

  15. #14
    Darwin's Avatar

    Default Re: Интересные куски кода (короткие)

    Живой код есть, но более детальная информация является коммерческой тайной, так что сорри.

    Обфусцируется не сам исходник C\C++, а то что будет компилиться, можно считать это объектником (более подробная информация, снова относится к ком. тайне).

    Оффтоп

  16. #15
    500mhz's Avatar

    Default Re: Интересные куски кода (короткие)

    Darwin что секретного в обфускации обьектников? В природе есть и крипторы и упаковщики обьектников в одном пакете с линкером.

  17. #16
    Darwin's Avatar

    Default Re: Интересные куски кода (короткие)

    Правила, принятые моим работодателем, запрещают разглашение любой информации связанной с проектами. А так ничего особо секретного нет.
    Last edited by Darwin; 12-12-2013 at 08:28.

  18. #17
    500mhz's Avatar

    Default Re: Интересные куски кода (короткие)

    Лучше подскажите как оптимальней на С сделать обмен значениями между двух переменных?
    Ну типа то что на асме xchg eax,ebx.

  19. #18
    JKornev's Avatar

    Default Re: Интересные куски кода (короткие)

    Студия к примеру обычно такой код оптимизирует сама в контексте вызова :
    Code:
    void swap(int *a, int *b)
    {
    	int c = *a;
    	*a = *b;
    	*b = c;
    }
    причём очень не плохо, хотя всё зависит от ситуации. Для полной уверенности пометить как inline

    PS тестанул, компильнуло вообще отличненько, например в такой ситуации :
    Code:
    ...
    printf("%d %d\n", a, b);
    swap(&a, &b);
    printf("%d %d\n", a, b);
    ...
    компиль понял что ему подсунули и в листинге это выглядело примерно так :
    Code:
    ...
    push b
    push a
    push format
    call printf
    push a
    push b
    push format
    call printf
    Так что в некоторых ситуациях оптимизатор срабатывает лучше чем самая едрёная асм вставка, что и так давно доказано.
    Last edited by JKornev; 12-12-2013 at 15:44.

  20. Пользователь сказал cпасибо:
    ximera (12-12-2013)
  21. #19
    Darwin's Avatar

    Default Re: Интересные куски кода (короткие)

    http://www.azillionmonkeys.com/qed/case3.html

    Там где нужна такая оптимизации надо на асме все писать, не в начале 90-х же живем...

  22. #20
    keyst0rke's Avatar

    Default Re: Интересные куски кода (короткие)

    Оффтоп
    Делай то, что должен. Дальше будь, что будет.
    (с) Дед

+ Reply to Thread

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:31
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org