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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    ne_viens

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    >bomzzz
     
    В функцию RtlCreateProcessParameters(&pp,...) передаётся адрес указателя pp.
    RtlCreateProcessParameters() делает malloc(), заполняет структуру и записывает адрес начала структуры в адрес pp. (*pp = RtlUserProcessParameters;)
    Дальше в коде исползуется указатель, который указывает на структуру RTL_USER_PROCESS_PARAMETERS
    и в самом конце RtlDestroyProcessParameters() освобождает (free()) память занимаемую структурой.
     

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 19:05 02-03-2013
    kvazigorynich

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Думаю что в моем случае дела обстоят иначе.
     
    Слева оригинал, требующий dll и с подчеркиванием и без. Справа тот что я поправил. Ему хватает просто dll без подчеркиваний.
     
       
     
    И кстати у левого, судя по показаниям плагина, нет зависимостей от dll без подчеркивания.
     
    UPD: Вопрос с подчеркиваниями решился. Просто заменил либы на свои откомпилированные.
     
    Вопрос со статической сборкой никак решить не получается. Как только я подсовываю статическую библиотеку, линкер сразу начинает ругаться на то что функции в libxslt не определены. Самое интересное что эти функции должны быть в libxml2, но в статической libxml2 такое ощущение что их нет.

    Всего записей: 794 | Зарегистр. 06-09-2007 | Отправлено: 19:15 02-03-2013 | Исправлено: kvazigorynich, 23:29 02-03-2013
    nikolaiKrasaychik

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

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



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ne_viens
    пасиба, просветление началось.
     
    Добавлено:
    ne_viens
    ура бсода нет. еще какая то кривость но заработало.
     
    http://undocumented.ntinternals.net/UserMode/Structures/RTL_USER_PROCESS_PARAMETERS.html
    Should be set before call RtlCreateProcessParameters.
    никогда бы не подумал что тут это имелось ввиду
     
     
    Добавлено:
    я с этим сутки ковырялся. в принципе мог дорыться. я уже пробовал создаваемую структуру разбирать и не мог понять куда оно подевалось.
    и с этим проковырялся часов шесть. у меня число от 2000-ка оказывается было
    invoke MessageBoxW,0,[7FFE0000h+48],ADDR mestitle,MB_ICONASTERISK

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



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    никто такой фигней не пользовался LdrEnumerateLoadedModules
    все что нашел http://www.wasm.ru/forum/viewtopic.php?pid=221396

    Цитата:
    invoke LdrEnumerateLoadedModules, 0, addr MyProc, addr stop
     
    MyProc proc DataTableEntry:DWORD,Parameter:DWORD,StopEnumerate:DWORD
        assume ebx:ptr LDR_DATA_TABLE_ENTRY
        mov ebx, DataTableEntry
        invoke MessageBoxW,0,[ebx].BaseDllName.Buffer,ADDR mestitle,MB_ICONASTERISK
        assume ebx:NOTHING
        mov byte ptr[StopEnumerate], 1
        mov Parameter, 1
        xor eax, eax
        ret
    MyProc endp
     

    я уж по всякому перепробовал один раз вызывает функция обратного вызова с именем самой программы, а потом выдает ошибку c00000ef - STATUS_INVALID_PARAMETER_1
     
    почему ни LdrGetDllHandle ни GetModuleHandle не возвращают handle ntoskrnl.exe?
    пытаюсь из нее получить адрес функции  
    invoke LdrGetProcedureAddress, hntoskrnl, $CTA0("InbvResetDisplay"), 302, addr addrInbvResetDisplay;
    и по имени и по ординалу фигу. а из user32.dll выдает.
     
    A user-mode application cannot call the entry points in Ntoskrnl.exe, and a kernel-mode driver cannot call the entry points in Ntdll.dll.
     
    Добавлено:
    ne_viens
    получится так - к командному интерпретатору сделать драйвер, который будет загружаться с помощью NtLoadDriver и вызывать функции ядра недоступные пользовательскому режиму?

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 09:14 03-03-2013 | Исправлено: bomzzz, 09:44 03-03-2013
    kvazigorynich

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

    Код:
     
    /MinGW/lib\libexslt.a(common.o): In function `exsltNodeSetFunction':
    \MinGW\msys\1.0\home\3K\libxslt\libexslt/common.c:71: undefined reference to `_imp__xmlFree'

     
    Эта функция есть в динамической библиотеке, а в статической она называется просто '_xmlFree'.
     
    Как с этим бороться?
     
    UPD: При сборке этой библиотеки(libexslt.a) принудительно указал на статическую libxml2.a и убрал флажок -lxml2. Либа стала в 5 раз больше, но эффекта никакого. Все равно беда с функциями.
     
    Я так понимаю проблема возникает при генерации объектных файлов. В o файлах как раз присутствуют эти неразрешимые имена функций. Не пойму как этот процесс контролировать. Как заставить использовать нужные функции при генерировании объектных файлов?

    Всего записей: 794 | Зарегистр. 06-09-2007 | Отправлено: 10:59 03-03-2013 | Исправлено: kvazigorynich, 11:49 03-03-2013
    bomzzz



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

    Цитата:
    ne_viens
    получится так - к командному интерпретатору сделать драйвер, который будет загружаться с помощью NtLoadDriver и вызывать функции ядра недоступные пользовательскому режиму?

    получится. проверил

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 11:45 03-03-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ne_viens
    Можешь прокомментировать пример на русском языке? Желательно по строкам. Сначала я почитал основные разделы в справке, чтобы разобраться, но сам алгоритм понять всё равно сложно.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 12:16 03-03-2013 | Исправлено: AZJIO, 12:17 03-03-2013
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kvazigorynich
    Ключ скрипта конфигурации "--disable-shared" пробовали?

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 12:52 03-03-2013
    kvazigorynich

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
     
    делал так
     
    ./configure --enable-static --disable-shared
     
    Этот ключ везде надо использовать? Я имею ввиду при сборке всех библиотек и приложения?

    Всего записей: 794 | Зарегистр. 06-09-2007 | Отправлено: 13:28 03-03-2013 | Исправлено: kvazigorynich, 13:30 03-03-2013
    Abs62



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

    Цитата:
    Этот ключ везде надо использовать? Я имею ввиду при сборке всех библиотек и приложения?

    Если стоит задача по максимуму обойтись без динамических библиотек - по идее, да.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 13:39 03-03-2013
    kvazigorynich

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
     
    Пересобрал все с ключом --disable-shared. Вроде нормально теперь.
     
    Осталось только freetype победить. В исходниках configure сделан через одно место. Он утверждает что у меня unix и пытается соответствующую сборку сделать.
     
    Вобщем все собрал как хотел. Траблы были из-за того что путаница в директориях присутствовала и надо было использовать --disable-shared. Хотя это и не должно было влиять. Потому что по умолчанию генерятся обе библиотеки. Правда есть подозрение что дело скорее в директории include. Видимо она отличается при сборке с shared и без.

    Всего записей: 794 | Зарегистр. 06-09-2007 | Отправлено: 14:38 03-03-2013 | Исправлено: kvazigorynich, 15:25 03-03-2013
    ne_viens

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

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 14:41 03-03-2013
    bomzzz



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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В native программировании от меня плохой советник будет, так как забросил я это дело с приходом win64. Если нельзя запустить неподписанный драйвер, то нафик его и писать.
    Последним был драйвер, который включает аналоговые входы на DV камере как dvin.exe (http://www.sps.volyne.cz/set1394/anin/analog.html) но из WinXP. Понадобилось старые VHSы перегнать на цифру.
    Кстати, из-за win64 я из MASMа на C перешёл тоже.
     
    А в native очень мало что доступно из того, что имеется в user modе. Даже GetModuleHandle() надо писать самому. И количество доступных API уменьшается с увеличением IRQL. И большинство native API вообще не документировано- надо самому искать информацию по белу свету, или выкапывать из Debug Symbols, или дизасемблировать Идой.
     

    Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:05 03-03-2013
    bomzzz



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

    Цитата:
    надо самому искать информацию по белу свету,

    ну так интерестнее.

    Цитата:
    Даже GetModuleHandle() надо писать самому.

    LdrGetDllHandle не надо
    ярад конечно за микрософт что они так далеко продвинулись, но я еще так далеко не продвинулся

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот такой вопрос возник.
     
    Имеется ли возможность конвертануть проект, который я наконец-то заставил работать под MSYS например в проект для Visual Studio. Насколько я знаю CMAKE умеет такое, но там ведь нужен конфигурационный файл. Этот файл автоматически можно сгенерировать? Или проще добавить все файлы проекта в Visual Studio, все включаемые файлы перенести в директории include или в сам проект, собрать библиотеки под Visual Studio и подключить к проекту? Мне просто удобнее в Visual Studio работать. В блокноте не очень удобно исходники править . Боюсь только что этот процесс опять начнет трепать мне нервы и займет день или два. Кто-нибудь пробовал вручную переносить?

    Всего записей: 794 | Зарегистр. 06-09-2007 | Отправлено: 14:57 04-03-2013
    bomzzz



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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, я погляжу вы тут шарите в dll-ках и прочей ереси Может подскажите мне чего полезного. Вобщем есть прога, к которой подключаются модули в виде dll файлов. И прога и dll-ки написаны на builder 6. Давненько мне нужно было подшаманить dll, изменить существующие функции, добавить нового функционала. А стояла у меня тогда ВинХП и CodeGear C++ Builder 2009 или 2010. И ставить шестой билдер нехотелось. Попробовал загнать исходники dll в Builder 2009 - с небольшими доработками всё скомпилилось. Но подсунув эту dll-ку проге - та благополучно валилась. Видимо что-то в dll отличалось, описания функций, типы передаваемых/возвращаемых параметров, или ещё чего. Копнув немного в инете - ничего дельного не нашел. Незнал как точно сформулировать запрос. Вобщем пришлось тогда тупо ставить builder 6 и компилить всё в нем.
    Щас у меня компик обновился, стоит Win7 и RadStudio C++ Builder XE2. И снова понадобилась доработка тех dll-ок. Ставить динозавра Builder 6 я чего-то нехочу. Может в XE2 в свойствах проекта где-нибудь чего-нибудь потыкать можно, чтоб "интерфейс" dll-ки скомпиленой в XE2 стал похож на Builder 6. Вобщем получилось вроде так: нужно чтоб dll-ка написаная на XE2 работала с приложением написаным на Builder 6.

    Всего записей: 121 | Зарегистр. 21-02-2007 | Отправлено: 20:30 04-03-2013 | Исправлено: suslovp, 20:32 04-03-2013
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    перекомпилировать или сразу программы писать совместимо, каждую функцию проверяя по мсдну. чтоб была совместима до Windows NT. даже драйвера можно совместимо написать.
     
    что можно сделать = нативная консоль как я понял - это пользовательский режим, хотя работают и Zw и Nt функции одинаково прекрасно. чтоб использовать функции NtOsKrnl пришлось сделать драйвер. как можно одним файлом обойтись?

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 22:13 04-03-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