Я пытаюсь загрузить 64-битное ядро по адресу 0x1000
AllocatePages
только возвращает адрес выделенной памяти по адресу в последнем параметре. Т.е. куда будут загружены сегменты ELF сказать нельзя и, соответственно, без динамической релокации этот ELF скорее всего работать не будет.AllocatePages
будет то же расстояние, что и между сегментами ELF, в то время как кодогенерация с флагом -fPIE
вполне может считать это расснояние неизменным. Такой ELF нужно загружать в один большой блок памяти, сохраняя расстояние между сегментами.header.e_entry
-- это прыжок в неизвестность. gcc
вызванный с флагом -fomit-frame-pointer
генерирует код без этой последовательности и использует rbp как ещё один регистр общего назначения.Почему тогда все регистры не помещаются в стек?
Зачем нужен отдельный синтаксис для препроцессора
Как иизменить параметр tdp_mmu?
echo N | sudo tee /sys/module/kvm/parameters/tdp_mmu
не помогает?root@Line-host:~# echo "options kvm tdp_mmu=N" >/etc/modprobe.d/kvm-disable-tdp-mmu.conf
root@Line-host:~# cat /sys/module/kvm/parameters/tdp_mmu
Y
rmmod kvm ; modprobe kvm
чтобы убедиться, что параметр применяется. Любая команда start/stop/restart NetworkManager выдает одно и тоже
sudo: resolve_conf.c:571: update_from_conf: Assertion 'resolve_conf_matches (resp, conf)' failed
/etc/resolv.conf
.su
, например. как мне модифицировать мою программу, чтобы она могла определять потоки и корректно отправлять их коллектору?
почему вычитается 32?
pushq %rbp
movq %rsp, %rbp
subq $32, %rsp
movsd %xmm0, -24(%rbp)
movsd %xmm1, -32(%rbp)
movsd -32(%rbp), %xmm0
subsd -24(%rbp), %xmm0
movsd %xmm0, -8(%rbp)
movsd .LC0(%rip), %xmm0
divsd -8(%rbp), %xmm0
movsd %xmm0, -16(%rbp)
relocation R_X86_64_32S against `.text' can not be used when making a shared object
что делать?
objdump -dr lib.o
27: 0f 01 1c 25 00 00 00 lidt 0x0
2e: 00
2b: R_X86_64_32S .text
lea rax, [rel idtDescriptor]
lidt [rax]
dq _idt
Я долго изучал код
пытался менять ... "0x013ded84 ldr x1, [x8, 0x250]"
Задача либо понять "1" на любое нужное число, либо сделать так чтобы количество скачиваний было равным цене товара.
adrp x8, 0x2d71000
который теперь будет не нужен. выдает непонятную фигню
res resb 1
…
mov [res], eax
по умолчанию int является signed
Irrespective of the choice made, char is a separate type from the
other two and is not compatible with either.
signed char
-- это, пожалуй, единственное не вызывающее вопросов применение ключевого слова signed в C-коде написанном человеком. В остальных случаях роль signed -- чисто декоративная. все это не подходит, так как мне нужно чтобы полученное число c лежало в промежутке [0; 11]
a * (max(b) + 1) + b
же.max(b) + 1
. Как получить то же самое в С++?
uint8_t foo[] = {7, 7};
int i = foo[0] + 256 * foo[1];
В js я могу получить это так
…Int8Array
…
почему программа завершилась? Вмешалась ОС? Но если так, то почему?
Почему я не могу поменять значение самого указателя (ведь указатель - это всего лишь ссылка на адрес памяти, а не на значение).
a = (int *)10;
могу ли я указателю дать ссылку на конкретную ячейку в памяти?
получаю ошибку, ведь вряд ли адрес памяти у указателя хранится в виде 16-ричного целочисленного литерала.
int *a = (int *)0x0061FF18;