Помогите новичку

Applications development, KoOS API questions
  • Не надо ничего расширять, я почистил логи - теперь есть место :)
  • в файле kernel.asm есть строчка include "lang.inc" однако в папке kernel такого файла нет. Например в исходниках версии 0.7.7.0 всего 2 файла с таким названием (если я не ошибся).
    Зачем тогда эта строчка в kernel.asm ?
  • z525 wrote:в файле kernel.asm есть строчка include "lang.inc" однако в папке kernel такого файла нет. Например в исходниках версии 0.7.7.0 всего 2 файла с таким названием (если я не ошибся).
    Зачем тогда эта строчка в kernel.asm ?
    The file lang.inc is generated by the build script build.bat or makefile.
    You can create your own file with the text "lang fix ru" or "lang fix en".
    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
  • Есть lib от masm (coff) в ней есть точка входа. Вопрос такой: "Можно ли её прицепить как то к проекту на фасм или собрать совместно, чтобы потом передать управление на эту точку?"

    PS: также есть intel omf obj из которого собрана либа.

    Грубо говоря что то вроде такого необходимо:

    Code: Select all

      use32
      org	 0x0
    
      db	 'MENUET01'
      dd	 0x01
      dd	 Start
      dd	 I_END
      dd	 0x1000
      dd	 0x1000
      dd	 0x0
      dd	 0x0
    
    Start:
    jmp  EPOINT ; точка куда надо передать управление, которая находится в obj
    file   "demo.obj" ; тот самый obj
    I_END:
    Собственно прилагаю к посту lib и obj (intel omf) , а также obj2 (переконвертированный из intel omf в mscoff)
    Точка входа Start$qqrv
    При сборке lib использовал следующие параметры:
    link.exe -lib /FORCE:UNRESOLVED /fixed /subsystem:native /base:-0x0 /ALIGN:16 /ENTRY:Start$qqrv /nologo demo.obj /out:demo.lib
    Attachments
    demo.zip (1.71 KiB)
    Downloaded 333 times
  • Еще один вопрос. Функция 70 подфункция 7:
    eax = 70 - номер функции
    ebx = указатель на информационную структуру
    Я описал структуру:

    Code: Select all

    struct files_information
      number       dw 7 ; +0: dword: 7 = номер подфункции 
      flags        dw 0 ; +4: dword: поле флагов: 
      params       dw 0 ; +8: dword: 0 или указатель на ASCIIZ-строку с параметрами 
      res1         dw 0 ; +12 = +0xC: dword: 0 (зарезервировано) 
      res2         dw 0 ; +16 = +0x10: dword: 0 (зарезервировано) 
      null         db 0 ; +20 = +0x14: db 0 
      string       dd ? ; +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
    ends
    Объявил данные:

    Code: Select all

        fi      files_information
        way     db '/rd/1/calc',0         ; замена на /sys/calc ничего не дала
    Вешаю на обработчик нажатия кнопки:

    Code: Select all

    run:
        mov     eax,way ; получаем указатель на строку
        mov     [fi.string],eax
    
        mov     eax,4                         ; функция 4: написать текст в окне
        mov     ebx,10*65536 + 70            ; [x начальный] *65536 + [y начальный]
        mov     ecx,0x40000000                ; цвет текста RRGGBB
        mov     edx,[fi.string]               ; указатель на начало текста
        mov     esi,9                         ; длина текста в байтах
        mov     edi,[sc.grab]
        int     0x40
    
        mov     eax,70
        mov     ebx,[fi]
        int     0x40
        mov     [cel],eax          ; всегда возвращает 2 !!!!!!!!!!!!!!
        call    draw_result         ; вот тут вывожу значение 47 функцией
        ret
    ;end_run
    присвоение пути структуре проходит (судя по выводу 4 функции). Потом вызываю 70 функцию, но еах всегда возвращает 2. Вопрос - где я опять накосячил!!!?
  • Akyltist
    Пока вижу один множественный косяк.
    Общий формат информационной структуры:
    +0: dword: номер подфункции
    +4: dword: смещение в файле
    +8: dword: старший dword смещения (должен быть 0) или поле флагов
    +12 = +0xC: dword: размер
    +16 = +0x10: dword: указатель на данные
    +20 = +0x14: n db: ASCIIZ-строка с именем файла или
    +20 = +0x14: db 0
    +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла
    dword = dd
    word = dw
    byte = db
  • Фёдор Михайлович Достоевский по этому поводу уже написал однажды книгу.
    Спасибо большое! Пошел править.

    Хм не помогло
  • Мне кажется что проблема здесь
    Akyltist wrote:mov     ebx,[fi]
    в ebx должен быть адрес структуры fi, а судя по коду туда попадает 4-х быйтный dword из fi (т. е. номер подфункции ebx = 7)
    Попробуй сделать так:

    Code: Select all

    mov ebx,fi
  • Можно как то менее затратно узнать PID текущего процесса не прибегая к 9 функции?
  • Включить TLS. PID хранится по адресу fs:0.
  • Serge wrote:Включить TLS. PID хранится по адресу fs:0.
    Накладные расходы не нивелируют разницу?
  • Mario
    Бесплатно ничего не бывает.
  • Serge wrote:Mario
    Бесплатно ничего не бывает.
    Вопрос в актуальности твоего совета относительно заданного вопроса.
  • Кто нибудь знает? Есть ли способ, сделать более быстрый снимок области экрана, чем при использовании ф.35 или ф.36?

    Переделываю свой ScrollBar. Добавил в него функцию полупрозрачности. Он у меня очень сильно мерцает, из-за тормазов ф.36 (очень медленно делается снимок). Help me, please! :mrgreen:

    Демо файлы со скроллбаром, прикрепил.

    Image
    Attachments
    Downloaded 328 times
  • Who is online

    Users browsing this forum: No registered users and 11 guests