Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Перезалил зеркало
    1. добавил тему Black
    2. Включил шрифт Consolas

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 08:51 21-02-2013 | Исправлено: AZJIO, 10:22 21-02-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    >netfil

    Цитата:
    ...

    Код:
    while(WaitForSingleObject(hTimer, 100)==WAIT_TIMEOUT){

    то все работает

     
    Вопрос только, как работает?
    Потоки спят на WaitForSingleObject() 0.1 секунды, потом один раз отрабатывают цикл, потом опять спят 0.1 секунды, итд 10 раз. Просто спят.
    И ещё запись за пределами arr[] может произойти.
    И ещё- нехорошо огораживать с CriticalSection то, чего не требуется. В этом случае поставить cout в секцию примерно то-же самое, что засесть в единственном туалете пивбара книжку почитать.

    Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 12:55 21-02-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Существует ли Tidy для Си,C++?

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 13:32 21-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите пожалуйста на Си переделать, и напишите как скомпилировать правильно батником
    ntdll.asm

    Цитата:
     
        .386
        .model flat, stdcall
        option casemap :none
     
    .code
     
    LibMain proc instance:DWORD, reason:DWORD, reserved:DWORD
     
        mov eax, 1  
        ret
     
    LibMain endp
     
    RtlUshortByteSwap PROC FASTCALL PARAM1:DWORD
     
        ret
    RtlUshortByteSwap endp
     
    end LibMain

    ntdll.def

    Цитата:
    LIBRARY ntdll.dll
    EXPORTS @RtlUshortByteSwap@4

    http://rghost.ru/43963366
       
     
    пытаюсь сделать либу из инклуда для масма. а масм FASTCALL вызов не поддерживает, вот такая микрософта гадюка (в принципе мы не гордые, можем сами положить все куда надо и стек выровнять, но либу фиг сделаешь). делаю POASM-ом который FASTCALL понимает, но вот ни фига не получается. с родной библиотекой из DDK все работает, а с самодельными либами FASTCALL функции работать не хотят (decl stdcall работают). винда от дров сделанных с таким либами вообще валится, какая то ошибка ядра

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:15 21-02-2013 | Исправлено: bomzzz, 16:36 21-02-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ////////////////ntdll.c///////////////
    //cl /Ox /LD ntdll.c ntdll.def
     
    unsigned short __fastcall RtlUshortByteSwap(unsigned short x)
    {
        return _byteswap_ushort(x);
    }
     
    ////////////////ntdll.def///////////////
    LIBRARY ntdll
    EXPORTS RtlUshortByteSwap
     
     
    ////////////////test.c///////////////
    //cl /Ox test.c
    #pragma comment(lib, "myntdll.lib")
     
    unsigned short __fastcall RtlUshortByteSwap(unsigned short);
     
    int main()
    {
        return RtlUshortByteSwap(0x2211);
    }
     
     
     
    Только нафик это надо, если можно просто inline написать: _byteswap_ushort(x);
    Там 3 инструкции ассемблера.
     
     

    Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 16:45 21-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Только нафик это надо, если можно просто inline написать: _byteswap_ushort(x);
    Там 3 инструкции ассемблера.  

    не понял
     
    Добавлено:
    а где в коде вот эта часть? или она где то автоматом в инклудах? у меня то не студия а кусок от сутудии. сейчас попробую

    Цитата:
    LibMain proc instance:DWORD, reason:DWORD, reserved:DWORD
     
        mov eax, 1  
        ret  

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:47 21-02-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Зачем вызывать RtlUshortByteSwap(), если полные ее аналоги на МАSMe:
    mov al, ch
    mov ah, cl
     
    на C:
    _byteswap_ushort(x);
     
    При вызове из ntdll.dll добавляется
     
    E8 04000000    CALL <JMP.&ntdll.RtlUshortByteSwap>
    FF25 E8804000  JMP DWORD PTR DS:[<&ntdll.RtlUshortByteSwap>]
     
    в начале и RET в конце.
    Итого имеем кода на 300% больше.  
     
     
    LibMain() автоматом собирается из DEFAULTLIB.
     

    Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 17:06 21-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    затем что это практически единственная функция из ядра которую можно безопасно вызвать для проверки. а если на драйвере проверять от которого винда валится это бибилиотека обойтеся в винт, а может еще время на восстановление винды потребоваться

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:16 21-02-2013 | Исправлено: bomzzz, 17:17 21-02-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Проверки чего?

    Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 17:19 21-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ne_viens
       
     

    Цитата:
    .\bin\cl.exe /Ox /LD ntdll.c ntdll.def /link /libpath:.\lib /noentry

     
    Добавлено:
    ne_viens
     
    _byteswap_ushort  
    я чета не понял, она что ли сама байты переворачивает, а не обращается к NTDLL.DLL ???
    мне нужна динамическая библиотека которая только скелет дллки ntdll.dll повторяет, чтоб при компиляции она использовалась как таблица импорта(?). а байты можно и без подпрограммы перевернуть
    http://rghost.ru/43966173 у меня есть инклуд сделанный из мсдновской библиотеки взятой из DDK. он будет лежать в инсталяторе масма. а когда масм будет инсталироваться то все либы сделаются из этих инклудов. тогда дистриутив будет весить всего ничего, в либах будет только все нужное, и некоторые исправления и исключения они учтут
     
     

    Цитата:
     
    unsigned long __fastcall RtlUshortByteSwap(unsigned long x)
    {
        return;
    }

    судя по тому что и так переворачивает - вот так и есть то что надо
     
    а как будет изменятьс код если параметров будет больше? код будет создаваться батником из инклудов

    Цитата:
    EXTERNDEF SYSCALL @RtlUshortByteSwap@4:PROC
    RtlUshortByteSwap textequ <@RtlUshortByteSwap@4>
    EXTERNDEF SYSCALL @RtlUlonglongByteSwap@8:PROC
    RtlUlonglongByteSwap textequ <@RtlUlonglongByteSwap@8>
    EXTERNDEF SYSCALL @RtlUlongByteSwap@4:PROC
    RtlUlongByteSwap textequ <@RtlUlongByteSwap@4>
    EXTERNDEF SYSCALL @RtlInterlockedPushListSList@16:PROC
    RtlInterlockedPushListSList textequ <@RtlInterlockedPushListSList@16>

     
     
    Добавлено:
    вот так это выглядит. запусти батник makelibs. для 2000-ка они быстро делаются
    http://rghost.ru/43967060
     
    Добавлено:

    Цитата:
    DbgPrintEx PROTO C :VARARG
    DbgPrint PROTO C :VARARG
    DbgBreakPoint PROTO STDCALL
    CsrSetPriorityClass PROTO STDCALL :DWORD,:DWORD
    CsrProbeForWrite PROTO STDCALL :DWORD,:DWORD,:DWORD


    Цитата:
    ////////////////ntdll.c///////////////
    //cl /Ox /LD ntdll.c ntdll.def
     
    unsigned long __fastcall RtlUshortByteSwap(unsigned long x)
    {
        return 0;
    }
    unsigned long __fastcall RtlUlongByteSwap(unsigned long x)
    {
        return 0;
    }
    unsigned long __fastcall RtlUlonglongByteSwap(unsigned long x,unsigned long y)
    {
        return 0;
    }
    unsigned long __fastcall RtlInterlockedPushListSList(unsigned long w,unsigned long x,unsigned long y,unsigned long z)
    {
        return 0;
    }

     
    а как stdcall и decl будут добавляться? а с возвращаемым числом я не намудрил?

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:21 21-02-2013 | Исправлено: bomzzz, 19:12 21-02-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Перезалил справку, попробовал сделать подсветку кода в примерах. Сделать не сложно, но учитывая, что всего примеров 1320 в 344 файлах, то лучше это дело автоматизировать. Сейчас можно посмотреть как пример в "Двухмерные массивы". Вообще я уже сделал экспорт примеров в файл с меткой разделителем и эту же метку вставил в файл взамен примеров, конвертировал в HTML в Notepad++, теперь осталось разложить файл в массив и взамент меток вставить ассоциированные блоки.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 19:13 21-02-2013 | Исправлено: AZJIO, 01:26 22-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну это положим я догадался

    Цитата:
    unsigned long __stdcall RtlRandom(unsigned long z)
    {
        return 0;
    }

     
    а как переделать
     
    vsprintf PROTO C :VARARG
     
    unsigned long __cdecl vsprintf

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:18 21-02-2013 | Исправлено: bomzzz, 20:19 21-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    unsigned long __cdecl Myproc(void)
    {
        return 0;
    }

     
    вот так правильно? обратно экспортируется правильно.
     
    Добавлено:
    сделал первую библиотеку батником, сжульничал взял такую в которой только стдкол фукции. работкаит

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 23:31 21-02-2013
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    unsigned long __cdecl Myproc(void)  

     
    Да хоть void Myproc(void), для C функций всёравно.

    Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 00:36 22-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    я вообще все на воид переделал

    Цитата:
    void __stdcall ActivateActCtx (  unsigned long a,unsigned long b)
    {
        return;
    }
    void __stdcall AddAtomA (  unsigned long a)
    {
        return;
    }
    void __stdcall AddAtomW (  unsigned long a)
    {
        return;
    }
    void __stdcall AddLocalAlternateComputerNameA (  unsigned long a,unsigned long b)
    {
        return;
    }
    void __stdcall AddLocalAlternateComputerNameW (  unsigned long a,unsigned long b)
    {
        return;
    }
    void __stdcall AddRefActCtx (  unsigned long a)
    {
        return;
    }
    void __stdcall AddVectoredExceptionHandler (  unsigned long a,unsigned long b)
    {
        return;
    }
    void __stdcall AllocConsole (  )
    {
        return;
    }
    void __stdcall AllocateUserPhysicalPages (  unsigned long a,unsigned long b,unsigned long c)
    {
        return;

    папку BIN собрал, к сожалению самый последний cl.exe не хатит работать, пришлось предпоследний использовать, сейчас продумываю алгоритм для батника.
     
    Добавлено:
    два раза статью про этот воид в википендрии прочитал ни фига не понял. ну какие в ж объекты...
     
    руль это такой объект чтоб ехать направо и налево
    руль поворачивает колеса и машину уводит в право и лево
     
    кому сдались эти объекты. компьютер тупой как пробка умеет считать только до двух, токо шо быстро

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:42 22-02-2013
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    с умным человеком общается...

    Всего записей: 24056 | Зарегистр. 06-12-2002 | Отправлено: 02:26 22-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну не понимаю я так. никак. и не считаю что бейсиком мне на всю жизнь испортили стиль программирования. контроллер, прерывание, регистр - понимаю. а изучение объектов - программ созданных другими программистами... хотя допускаю что управляя объектами можно создавать более сложные продукты. но не понимая как руль работает, можно легко машину сломать

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 06:18 22-02-2013
    ItsJustMe

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Тут мы рискуем залезть в дебри околопрограммерского философствования и утонуть в спорах о длинах, весах и степени прожаренности... Тем не менее, рискну заметить, что создавать большое и многофункциональное приложение на высокоуровневом языке все же легче (по мне, так намного легче), чем на низкоуровневом. Доводилось мне как-то видеть листинг одного приложения на asm'е, которое на C занимало строчек 100 кода. На asm'е же кто-то не поленился 10 страниц накатать...

    Всего записей: 2025 | Зарегистр. 02-09-2005 | Отправлено: 06:32 22-02-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    но он мог и макрофункциями пользоваться. я же любитель, реально практические задачи выпадют редко и посидеть поптимизировать код до талого мне не лень. если бы я писал программы кому то за зарплату конечно бы так не усирался. это развлечение - головоломка. а лучший софт все таки написан на асме
     
    что до лично меня, если мне попадется программа требующая фреймворки я ее в жисть ставить не буду, и на 99% найду замену. и никакие навороченные менюшки от которых комп зависает мне даром не нужны.  
     
    Добавлено:
    вот ты начал изучать асм. начинаешь делать простые примеры. эти примеры у тебя копятся, а потом ты их используешь как макрофункции своего изготовления. пишешь программу - так это я уже делал. вытаскиваешь код, даже толком уже не помнишь как он работает. этого не делал - сидишь кусочек выдумываешь как получше сделать, так что эта уйма строк с опытом накопленным пишется быстро

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 07:48 22-02-2013 | Исправлено: bomzzz, 08:00 22-02-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доделал справку, надеюсь это заключительный аккорд.
    ссылка1, зеркало.
    Боялся испортить код в примерах, но по ходу разобрался в предполагаемых проблемах.
    1. Код содержал теги HTML, мог бы удалить, но решил игнорировать такие примеры, их не много.
    2. Спецсимволы в примерах, типа &lt; формат &код; заменил перед преобразованием.
    Перед экпортом блоков кода  в игнор были добавлены блоки содержащие две подряд строки начинающиеся с русского текста, код не содержащий хотя бы одного  символа англ. буквы или цифры, код содержащий только цифры, пробелы и ./ , код содержащий только англ. буквы и цифры (без спецсимволов).  
    3. Использовался плаг из Notepad++ для конвертирования в HTML формат.
    4. Удалён мусор (теги обрамляющие пробелы и объединение одинаковых следующих друг за другом тегов)
    5. Импорт блоков с логом для проверки ошибок, контроль что все замены выполнены.

    Всего записей: 4407 | Зарегистр. 03-05-2006 | Отправлено: 08:40 22-02-2013
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru