Сейчас на форуме: bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Вопрос по Си программированию
<< . 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение


Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 28 ноября 2010 23:54 · Поправил: PE_Kill
· Личное сообщение · #1

Хех мои жалкие потуги. Буду тут флудить. Пытаюсь накодить функцию. Функция на вход получает контекст и данные, после чего распихивает эти данные в контекст. Собственно цель оптимизировать весь код эту и другие функции по размеру. Компилятор в релизе вырезает нахрен функцию и втыкает ее код прямо в основной код, как будто это макрос. Собственно вопрос, как ему сказать что мне это не нравится, но при этом оставить оптимизацию по размеру?

-----
Yann Tiersen best and do not fuck





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 29 ноября 2010 19:00
· Личное сообщение · #2

Hexxx спасибо тебе, сделал просто многопоточную, и в импорте осталось только KERNEL32.DLL. Выходит не все знают о многих фишках сей, сталобыть топик то уже и не ламерский.

-----
Yann Tiersen best and do not fuck




Ранг: 35.0 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 29 ноября 2010 20:13
· Личное сообщение · #3

ntldr пишет:
Либо просто-напросто включить статический CRT, получить большой екзешник но без проблем.

PE_Kill пишет:
спасибо тебе, сделал просто многопоточную, и в импорте осталось только KERNEL32.DLL. Выходит не все знают о многих фишках сей, сталобыть топик то уже и не ламерский.

внимательней нужно читать, а топик ламерский)



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 03 декабря 2010 00:06 · Поправил: Hexxx
· Личное сообщение · #4

PE_Kill пишет:
Выходит не все знают о многих фишках

Ну многие еще не знают как можно сделать в VC минимальный EXE, на чистых API. И поэтому пишут на рассововерном асме... Но это уже другая история.

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 03 декабря 2010 00:57
· Личное сообщение · #5

Hexxx
Ну многие еще не знают как можно сделать в VC минимальный EXE

Code:
  1. #ifdef NDEBUG
  2. // /Og (global optimizations), /Os (favor small code), /Oy (no frame pointers)
  3. #pragma optimize("gsy",on)
  4.  
  5. #pragma comment(linker,"/RELEASE")
  6.  
  7. // Note that merging the .rdata section will result in LARGER exe's if you using
  8. // MFC (esp. static link). If this is desirable, define _MERGE_RDATA_ in your project.
  9. #ifdef _MERGE_RDATA_
  10. #pragma comment(linker,"/merge:.rdata=.data")
  11. #endif // _MERGE_RDATA_
  12.  
  13. #pragma comment(linker,"/merge:.text=.data")
  14. #pragma comment(linker,"/merge:.reloc=.data")
  15.  
  16. #if _MSC_VER >= 1000
  17. // Only supported/needed with VC6; VC5 already does 0x200 for release builds.
  18. // Totally undocumented! And if you set it lower than 512 bytes, the program crashes.
  19. // Either leave at 0x200 or 0x1000
  20. #pragma comment(linker,"/FILEALIGN:0x200")
  21. #endif // _MSC_VER >= 1000
  22.  
  23. #endif // NDEBUG




-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 03 декабря 2010 14:49 · Поправил: Hexxx
· Личное сообщение · #6

Я говорю про совсем пустой exe, где даже ExitProcess() надо самому вызывать. А это так, чисто оптимизации.

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 156.1 (ветеран), 5thx
Активность: 0.020
Статус: Участник
Капрал

Создано: 03 декабря 2010 15:03
· Личное сообщение · #7

Поделишься или так и будешь модничать ?




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 03 декабря 2010 16:20 · Поправил: Coderess
· Личное сообщение · #8

Hexxx
Я говорю про совсем пустой exe, где даже ExitProcess() надо самому вызывать. А это так, чисто оптимизации.


Да, это так прикол был!

Hexxx

Мы тоже читали статью Криса про экстримальную оптимизацию компиляторов ;) Сейчас уже не вспомню названия да содержания тоже, будет лучше если поведаете незнающим

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 04 декабря 2010 02:36 · Поправил: Hexxx
· Личное сообщение · #9

Все вышеописанные оптимизации + /NODEFAULTLIB и имплементишь mainCRTStartup вместо main. Вот только тогда совсем голый EXE.

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 04 декабря 2010 12:23
· Личное сообщение · #10

Code:
  1. #include <windows.h>
  2.  
  3. #pragma comment(linker,"/MERGE:.rdata=.text")
  4. #pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
  5. #pragma comment(linker,"/ENTRY:MyMain")
  6. #pragma comment(linker,"/NODEFAULTLIB")
  7.  
  8. int MyMain()
  9.          MessageBox(0,0,0,0);
  10.          return 0;
  11. }


Что то типа того, но 1КБ максимум меньше не могу, если строку то уже 2 или 1.5

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 6.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 декабря 2010 14:20
· Личное сообщение · #11

Огого в 1 kb на С++
ассемблер отдыхает

Больше ничего из кода нельзя выкинуть?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 04 декабря 2010 14:40
· Личное сообщение · #12

vw_ пишет:
ассемблер отдыхает

С каких это пор?

-----
Лучше быть одиноким, но свободным © $me




Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 04 декабря 2010 14:41
· Личное сообщение · #13

vw_ пишет:
ассемблер отдыхает

?
www.xakep.ru/post/21399/default.asp



Ранг: 35.0 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 04 декабря 2010 18:41 · Поправил: sniper
· Личное сообщение · #14

опять размеры обсуждаете?

Coderess
1) без /GS- твой код не скомпилится
2) расскажи, зачем тут /NODEFAULTLIB




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 04 декабря 2010 19:10
· Личное сообщение · #15

Код не мой, а с UINC // KMiNT21, немного модифицирован мной

У меня компилится по умолчанию в студии 6

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 04 декабря 2010 19:53
· Личное сообщение · #16

У меня на 6 только так компилится

Code:
  1. #include <windows.h>
  2.  
  3. #pragma comment(linker,"/MERGE:.rdata=.text")
  4. #pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
  5. #pragma comment(linker,"/ENTRY:MyMain")
  6. #pragma comment(linker,"/SUBSYSTEM:windows")
  7. #pragma comment(linker,"/DEFAULTLIB:user32.lib")
  8.  
  9. int MyMain()
  10.         MessageBox(0,0,0,0);
  11.         return 0;
  12. }




Ранг: 6.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 декабря 2010 23:24
· Личное сообщение · #17

Ладно, Все повелись на провокацию by me
серьезное удивление во мне вызвал результат в 1kb -- в следствии словА восторга воспринятые вами в"остроый предмет" напоминающий штык хехе


NikolayD

Лишнее вы понадобавляли к коду



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 04 декабря 2010 23:43 · Поправил: Hexxx
· Личное сообщение · #18

vw_ пишет:
ассемблер отдыхает

Не отдыхает, но писать на асме исходя из того, что типа будет НАМНОГО меньше - сомнительно. Я понимаю там шелкод какой-то, но когда начинают целые драйвера писать на асме, выигрыш сомнительный. Но людям видимо нравится мазохизм.

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 06 декабря 2010 21:01
· Личное сообщение · #19

Code:
  1. #include <windows.h>
  2.  
  3. #pragma comment(linker,"/MERGE:.rdata=.text")
  4. #pragma comment(linker,"/FILEALIGN:128 /SECTION:.text,EWRX /IGNORE:4078")
  5. #pragma comment(linker, "/ALIGN:128")
  6. #pragma comment(linker,"/ENTRY:MyMain")
  7. #pragma comment(linker,"/NODEFAULTLIB")
  8.  
  9. int MyMain()
  10. {
  11.          MessageBox(0,0,0,0);
  12.          return 0;
  13. }


А вот так получится 640 байт.

-----
Лучше быть одиноким, но свободным © $me





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 06 декабря 2010 22:15
· Личное сообщение · #20

Чего Align не 1 тогда, уж если городить недокументированно и что не будет работать на старых виндах.
А вообще глупостью занимаетесь и баяном www.phreedom.org/solar/code/tinype/



Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 07 декабря 2010 02:02
· Личное сообщение · #21

до кучи
www.magma.ca/~wjr/PEview.zip



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 07 декабря 2010 08:16
· Личное сообщение · #22

спрашивается нафига, тоже болел какое-то время минимальными эксешниками и пришел к выводу - пусть лучше microsoft пишет crt, чем я буду тратить на это время изобретая велосипед и потом ко всему этому вылавливать ошибки при работе с многопоточностью и т.п.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 07 декабря 2010 09:15
· Личное сообщение · #23

Av0id пишет:
пришел к выводу - пусть лучше microsoft пишет crt, чем я буду тратить на это время изобретая велосипед

+100, пусть лучше прога будет полнофункциональной, чем обрубком минимального размера

-----
Everything is relative...




Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 08 декабря 2010 04:46
· Личное сообщение · #24

Подскажите как скомпилить этот код

Code:
  1. #include <windows.h>
  2. #include <winbase.h>
  3.  
  4. int main ()
  5. {
  6.  
  7. if (IsDebuggerPresent())
  8. {
  9.          MessageBoxA(NULL,"DETECTED","HAHA",MB_OK);
  10. else
  11. {
  12.          MessageBoxA(NULL,"NOT DETECTED","GOOD",MB_OK);
  13. }
  14. return 0;
  15. }


MV C++ 6 выдаёт такую ошибку C:\Program Files\Microsoft Visual Studio\MyProjects\antidebug\main.cpp(7) : error C2065: 'IsDebuggerPresent' : undeclared identifier




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 08 декабря 2010 07:34
· Личное сообщение · #25

Так в MSDN же написано:

BOOL IsDebuggerPresent(void);

To compile an application that uses this function, define the _WIN32_WINNT macro as 0x0400 or later


Т.е. нужен #define _WIN32_WINNT 0x0400 в stdafx.h

-----
Yann Tiersen best and do not fuck




Ранг: 17.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 08 декабря 2010 15:37
· Личное сообщение · #26

В эттаче список хидеров которые есть в директории инклуд. Примечательно то что нету stdafx.h. Попробовал в наглую определить дэфайн после инклудов всё равно та же самая ошибка. Пожалуйста скиньте у кого есть этот самый stdafx.h

06cf_08.12.2010_CRACKLAB.rU.tgz - headers.txt




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 08 декабря 2010 15:42
· Личное сообщение · #27

neoBlinXaker пишет:
Пожалуйста скиньте у кого есть этот самый stdafx.h

Делай AFX проект Win32 и получишь этот файл в директории проекта, а в инклюдах его и не должно быть.

-----
Everything is relative...





Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 08 декабря 2010 16:20
· Личное сообщение · #28

neoBlinXaker пишет:
Попробовал в наглую определить дэфайн после инклудов всё равно та же самая ошибка.

Попробуй определить его ДО инклудов.

-----
Следуй за белым кроликом





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 08 декабря 2010 18:03 · Поправил: OKOB
· Личное сообщение · #29

Консольное приложение под VC++ v6.0 с твоим кодом. Все собирается.

За решением загляни в файл stdafx.h

Или вообще так
Code:
  1. BOOL __stdcall _IsDebuggerPresent() 
  2. BOOL isdebuggerpresent;
  3. __asm { 
  4.    mov eax, fs:[30h] 
  5.    test eax, eax 
  6.    js short __w9x 
  7. __wNTx: movzx eax, [eax + 2] 
  8.    jmp __end 
  9. __w9x: cmp [eax + 54h], 1 
  10.    sbb eax, eax 
  11.    inc eax 
  12. __end: mov isdebuggerpresent, eax 
  13.    } 
  14.    return isdebuggerpresent;
  15. }


d7b8_08.12.2010_CRACKLAB.rU.tgz - debbbug.rar

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: NikolayD

Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 08 декабря 2010 18:16
· Личное сообщение · #30

neoBlinXaker читай напрямую:
Code:
  1. .......................
  2. WORD check;
  3. _asm
  4. {
  5. mov eax,fs:[30h]
  6. mov eax,[eax+2]
  7. mov check,ax
  8. }
  9. if (check)
  10. .......................





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 08 декабря 2010 18:38
· Личное сообщение · #31

Все эти асм-вставки делать крайне не рекомендуется в сколько-нибудь крупных проектах, если не хотите поиметь геморрой с портабельностью, ибо это всё костыли. В том же х64 это работать не будет.

| Сообщение посчитали полезным: Oott
<< . 1 . 2 . 3 . 4 . >>
 eXeL@B —› Программирование —› Вопрос по Си программированию
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати