Часто вижу в коде на C++ и C#, что для счётчиков … используют int, а не uint/unsigned int.
Почему праграмисты делают это?
"$str2$str1"
'/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt "FCCPS-CSQ - loggedinagents"'
подскажите, как это победить
#!/bin/bash
set -x
#Запуск скрипта в формате ./csqstats CSQ_name param
str1="$1 - $2"
str2="/usr/bin/python3 /opt/uccx-stats/uccx_parse.py /opt/uccx-stats/_uccx_csqstats.txt"
$str2 "$str1"
почему нельзя занести этот бит в регистр без сдвига, зачем это придумано
UCSRA |= (1<<U2X);
UCSRA |= U2X;
. В ассемблерном коде avr оба эти варианта превратятся в инструкцию sbi UCSRA, 1
, устанавливающую бит в регистре по номеру.Почему программа каждый раз занимает различные области памяти?
/proc/sys/kernel/randomize_va_space
либо командой setarch -R
для одного конкретного процесса. Отладчик gdb по умолчанию отключает ASLR для отлаживаемых программ. На виндовс, icore 5 процессоре вот сейчас, какой тип памяти работает. И какой тип виртуальной памяти на Risc 5 архитектурах.
Вот запускается программа. Что происходит. Типа создается процесс, в MMU в таблице страниц генерируется номер страницы PID>>24 + 0x4000000h адрес примерно. И заноситься в таблицу (https://ru.bmstu.wiki/MMU_(Memory_Management_Unit) ) Создаются типа страницы для данных. Окей
PID>>24 + 0x4000000h
, это вообще что?как программа вообще может в такой системе вызвать функцию из внешней библиотеки
Что за таблица дескрипторов. Где она находиться.
Как связана с таблицей страниц?
Что в конечном итоге храниться TLB буфере????
#!/bin/bash
function generateArgs(){
echo --arg1=$somevar1 \"--arg2=$somevar2 and spaces\" ... --arg1337=$somevar1337
}
eval "args=($(generateArgs))"
exec java "${args[@]}"
"${args[@]}"
передаются поотдельности и пробелы внутри них обрабатываются правильно.с чем могут возникнуть проблемы
Можно ли как-то защититься от этого; есть ли для этого какие-то специальные протоколы?
А как передать-то 32 битное значение в команде в 32 бит?
Логично что после команды значение(или адрес). Но тогда же получается какое-то нарушение логики.
LDR r [pc, #offset_to_literal_pool]
, XTENSA: l32r at, label
), при этом в команде кодируется смещение адреса литерала относительно PC. Либо загружают значения по частям, двумя или более командами (например MIPS загружает 16-битные части двумя разными инструкциями: lui rt, high16 ; ori rt, low16
, XTENSA загружает 16-битные части двумя одинаковыми инструкциями: CONST16 at, high16 ; CONST16 at, low16
, RISC-V загружает 20 и 12-битные части: auipc rd, symbol[31:12] ;
addi rd, rd, symbol[11:0]
).Timeout шлёт сигнал sigint если приложение не завершилось за определенное время.
--signal=INT
(см).Почему после окончания таймаута, утилита завершается, но без надписи "session saved"?
Начало TEXT минус конец PAGEZERO, получается 0x104a60000 - 0x100000000 = 0x4a60000 (делта смещение)
Вот адрес ,к примеру, на котором я хочу установить breakpoint
A - T + 0x104a60000
. Я пытаюсь загрузить 64-битное ядро по адресу 0x1000
AllocatePages
только возвращает адрес выделенной памяти по адресу в последнем параметре. Т.е. куда будут загружены сегменты ELF сказать нельзя и, соответственно, без динамической релокации этот ELF скорее всего работать не будет.AllocatePages
будет то же расстояние, что и между сегментами ELF, в то время как кодогенерация с флагом -fPIE
вполне может считать это расснояние неизменным. Такой ELF нужно загружать в один большой блок памяти, сохраняя расстояние между сегментами.header.e_entry
-- это прыжок в неизвестность. gcc
вызванный с флагом -fomit-frame-pointer
генерирует код без этой последовательности и использует rbp как ещё один регистр общего назначения.Почему тогда все регистры не помещаются в стек?