Задать вопрос
  • Как сделать дальний прыжок при переключении из 16 битного в 32 битный режим?

    @nnGot583 Автор вопроса
    jcmvbkbc, да уж а у меня еще 6 селекторов буду тогда все перепроверять. спасибо все работает как нужно.
    Написано
  • Как сделать дальний прыжок при переключении из 16 битного в 32 битный режим?

    @nnGot583 Автор вопроса
    jcmvbkbc, сделал как вы рекомендовали, вышло это:

    первый блок


    IN:
    0x0000000000007c77: cli
    0x0000000000007c78: lgdtw 0x7e48
    0x0000000000007c7d: mov %cr0,%eax
    0x0000000000007c80: or $0x1,%eax
    0x0000000000007c84: mov %eax,%cr0

    Linking TBs 0x11ab3e9c0 [0000000000007c1a] index 0 -> 0x11ab3eac0 [0000000000007c77]
    Trace 0: 0x11ab3eac0 [0000000000000000/0000000000007c77/00000040/ff000000]
    EAX=00000002 EBX=00000000 ECX=00000000 EDX=00000080
    ESI=00007c2c EDI=00000000 EBP=00000000 ESP=00006f00
    EIP=00007c77 EFL=00000202 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
    ES =0000 00000000 0000ffff 00009300
    CS =0000 00000000 0000ffff 00009b00
    SS =0000 00000000 0000ffff 00009300
    DS =0000 00000000 0000ffff 00009300
    FS =0000 00000000 0000ffff 00009300
    GS =0000 00000000 0000ffff 00009300
    LDT=0000 00000000 0000ffff 00008200
    TR =0000 00000000 0000ffff 00008b00
    GDT= 00000000 00000000
    IDT= 00000000 000003ff
    CR0=00000010 CR2=00000000 CR3=00000000 CR4=00000000
    DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
    DR6=00000000ffff0ff0 DR7=0000000000000400
    CCS=00000000 CCD=0000fedc CCO=EFLAGS
    EFER=0000000000000000
    ----------------

    следующий за ним

    IN:
    0x0000000000007c87: ljmpl $0x8,$0x7777

    Trace 0: 0x11ab3ecc0 [0000000000000000/0000000000007c87/000000c0/ff000000]
    EAX=00000011 EBX=00000000 ECX=00000000 EDX=00000080
    ESI=00007c2c EDI=00000000 EBP=00000000 ESP=00006f00
    EIP=00007c87 EFL=00000006 [-----P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
    ES =0000 00000000 0000ffff 00009300 DPL=0 DS16 [-WA]
    CS =0000 00000000 0000ffff 00009b00 DPL=0 CS16 [-RA]
    SS =0000 00000000 0000ffff 00009300 DPL=0 DS16 [-WA]
    DS =0000 00000000 0000ffff 00009300 DPL=0 DS16 [-WA]
    FS =0000 00000000 0000ffff 00009300 DPL=0 DS16 [-WA]
    GS =0000 00000000 0000ffff 00009300 DPL=0 DS16 [-WA]
    LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
    TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
    GDT= 00007e00 00000047
    IDT= 00000000 000003ff
    CR0=00000011 CR2=00000000 CR3=00000000 CR4=00000000
    DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
    DR6=00000000ffff0ff0 DR7=0000000000000400
    CCS=00000000 CCD=00000011 CCO=LOGICL
    EFER=0000000000000000
    Trace 0: 0x11a9bd100 [00000000ffff0000/00000000fffffff0/00000040/ff000000]
    EAX=00000000 EBX=00000000 ECX=00000000 EDX=00060fb1
    ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
    EIP=0000fff0 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
    ES =0000 00000000 0000ffff 00009300
    CS =f000 ffff0000 0000ffff 00009b00
    SS =0000 00000000 0000ffff 00009300
    DS =0000 00000000 0000ffff 00009300
    FS =0000 00000000 0000ffff 00009300
    GS =0000 00000000 0000ffff 00009300
    LDT=0000 00000000 0000ffff 00008200
    TR =0000 00000000 0000ffff 00008b00
    GDT= 00000000 0000ffff
    IDT= 00000000 0000ffff
    CR0=60000010 CR2=00000000 CR3=00000000 CR4=00000000
    DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
    DR6=00000000ffff0ff0 DR7=0000000000000400
    CCS=00000000 CCD=00000000 CCO=EFLAGS
    EFER=0000000000000000

    далее

    IN:
    0x00000000000fe05b: cmpl $0x0,%cs:0x61c8
    0x00000000000fe062: jne 0xfd0ef

    Trace 0: 0x11ab3edc0 [00000000000f0000/00000000000fe05b/00000040/ff000000]
    EAX=00000000 EBX=00000000 ECX=00000000 EDX=00060fb1
    ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
    EIP=0000e05b EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
    ES =0000 00000000 0000ffff 00009300
    CS =f000 000f0000 0000ffff 00009b00
    SS =0000 00000000 0000ffff 00009300
    DS =0000 00000000 0000ffff 00009300
    FS =0000 00000000 0000ffff 00009300
    GS =0000 00000000 0000ffff 00009300
    LDT=0000 00000000 0000ffff 00008200
    TR =0000 00000000 0000ffff 00008b00
    GDT= 00000000 0000ffff
    IDT= 00000000 0000ffff
    CR0=60000010 CR2=00000000 CR3=00000000 CR4=00000000
    DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
    DR6=00000000ffff0ff0 DR7=0000000000000400
    CCS=00000000 CCD=00000000 CCO=EFLAGS
    EFER=0000000000000000


    Я не могу увидеть что вызвало проблему. Инструкция интерпретировалась правильно, cr0 перед вызовом имел адекватное значение. База gdt верная и ее размер тоже. Я только понял, что значения появляются не случайные а это начало перезапуска QEMU

    самый первый блок в файле выглядит так

    IN:
    0x00000000fffffff0: ljmp $0xf000,$0xe05b

    Trace 0: 0x11a9bd100 [00000000ffff0000/00000000fffffff0/00000040/ff000000]
    EAX=00000000 EBX=00000000 ECX=00000000 EDX=00060fb1
    ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
    EIP=0000fff0 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
    ES =0000 00000000 0000ffff 00009300
    CS =f000 ffff0000 0000ffff 00009b00
    SS =0000 00000000 0000ffff 00009300
    DS =0000 00000000 0000ffff 00009300
    FS =0000 00000000 0000ffff 00009300
    GS =0000 00000000 0000ffff 00009300
    LDT=0000 00000000 0000ffff 00008200
    TR =0000 00000000 0000ffff 00008b00
    GDT= 00000000 0000ffff
    IDT= 00000000 0000ffff
    CR0=60000010 CR2=00000000 CR3=00000000 CR4=00000000
    DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
    DR6=00000000ffff0ff0 DR7=0000000000000400
    CCS=00000000 CCD=00000000 CCO=EFLAGS
    EFER=0000000000000000
    ----------------
    Написано
  • Как сделать дальний прыжок при переключении из 16 битного в 32 битный режим?

    @nnGot583 Автор вопроса
    jcmvbkbc, Да, я запускаю это на QEMU, все настройки дефолтные
    Написано
  • Как сделать дальний прыжок при переключении из 16 битного в 32 битный режим?

    @nnGot583 Автор вопроса
    jcmvbkbc, я только сейчавс заметил, в cs после выполнения инструкции не 8 а 0xf000 я пока не понимаю как так вышло
    Написано
  • Как сделать дальний прыжок при переключении из 16 битного в 32 битный режим?

    @nnGot583 Автор вопроса
    jcmvbkbc,
    1)
    вот мой скрипт запуска отладки

    source memr
    target remote localhost:1234
    define nni
    ni
    x/4i $pc
    end
    define ssi
    si
    x/4i $pc
    end
    b *0x7c00
    c

    (memr это просто скрипт для красивого вывода памяти)

    далее после этого

    открываю дизассемблер чтобы понять куда ставить точки останова, например 0х7с78
    675d3c5aa678d977223404.png


    2)
    состояние до выполнения этой инструкции

    675d3dfe5d11a690362855.png

    состояние после выполнения
    675d3e8c725ff095947127.png


    3)

    gdt


    sd_null:
    dd 0
    dd 0

    sd_kcode:
    dd 0x0000ffff
    db 0x00
    db 0x8a
    db 0xcf
    db 0x00

    sd_kdata:
    dd 0x0000ffff
    dd 0x00cf8200

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


    Написано
  • Как сделать дальний прыжок при переключении из 16 битного в 32 битный режим?

    @nnGot583 Автор вопроса
    jcmvbkbc, Но я поставил точку останова на адрес 0х7777 и перехода туда не произошло. А интерпретация не должна повлиять по идее. В регистре ip после дальнего прыжка адрес 0xe05b оказывается
    Написано
  • Как сделать дальний прыжок при переключении из 16 битного в 32 битный режим?

    @nnGot583 Автор вопроса
    Спасибо за ответ, но отметить решением не могу тк это не по теме вопроса. Где я натупил?
    Написано
  • Как скомпоновать код ассемблере с кодом на С для ядра?

    @nnGot583 Автор вопроса
    mayton2019, здравствуйте, проблема как-то решилась и вот мой шел скрипт если интересно 6756a47c7bb67566193947.png
    Написано
  • _dyld_get_image_vmaddr_slide(0) возвращает неподходящее смещение?

    @nnGot583 Автор вопроса
    Здравствуйте, вы правы, почти ни какого, единственное что адреса библиотек я получал из отладчика
  • Возможно ли подключится к UDP серверу и прослушивать его через сторонне ПО?

    @nnGot583 Автор вопроса
    У меня были похожие мысли, я пробую найти "правильный формат" в дизассемблере клиента. Проблема еще в том что оригинальный клиент каждую секунду посылает на сервер UDP пакеты похожие на пинг
  • Как защититься от метода CloseConnection?

    @nnGot583 Автор вопроса
    GavriKos, Да, это одноранговая сеть
  • Что находится по этому адресу в памяти?

    @nnGot583 Автор вопроса
    Большое спасибо за информацию
  • Что находится по этому адресу в памяти?

    @nnGot583 Автор вопроса
    получатся интересно, функция указывает на адрес а по этому адресу еще один адрес)
  • Изминение запроса Amazon DynamoDB?

    @nnGot583 Автор вопроса
    В декомпиляторе к x1 присваивается адрес 0x2d71250 я смотрел в шестнадцатеричном дампе на адрес, там нет строчек. Отладчик у меня не работает к сожалению, возможно потому что я дизассемблирую IOS приложение, работает только какой-то бестолковый эмулятор.

    Если поменять 0x250 на 0x248 то в запросе получится 0 вместо 1, логического объяснения я этому не нашел. Вы правы гадать так очень глупо.
  • Почему метод Last в любом случае возвращает 0?

    @nnGot583 Автор вопроса
    Мне нужен был именно метод. Я совсем забыл про то что в res я не могу присвоить еще не конвертированное значение из str. Пришлось повозиться с новыми переменными и Parse.

    Ожидал примерно такого ответа:

    public static int Last(int count)
    {
    string str = count.ToString();

    char newstr = str[str.Length - 1];

    string newnewstr = newstr.ToString();

    int res = int.Parse(newnewstr);

    return res;
    }
  • Проблема с кодом на C#?

    @nnGot583 Автор вопроса
    да, совсем не заметил. Большое спасибо