LINUX.ORG.RU

Избранные сообщения SyntaxError

Упаковать блоб в ro data секцию ELF и PE

Форум — Development

Имеются табличные данные, объемом с десяток мегабайт. Хочется таскать их прямо в исполнимом файле, влинкованными.

Самый простой вариант — вывалить данные в исходник на Си вида «const char my_data[] = {0x4, 0x9, 0x10, 0x3, ....};» и прогнать через компилятор и линковщик. Если бы табличка была размером в пару килобайт, я на этом бы и успокоился. Но вот поступать так с десятком мегабайт? Существует для этого какой-то менее костыльный способ?

 , , ,

Manhunt ()

ld

Форум — Development

Как известно, с помощью ld и objcopy можно линковать произвольные блобы в ELF (примерно так:

$ ld -r -b binary blob.bin -o blob.o
$ objcopy --rename-section .data=.rodata,contents,alloc,load,data blob.o
$ objdump -x blob.o

blob.o:     file format elf64-x86-64
blob.o
architecture: i386:x86-64, flags 0x00000010:
HAS_SYMS
start address 0x0000000000000000

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .rodata       00000100  0000000000000000  0000000000000000  00000040  2**0
                  CONTENTS, ALLOC, LOAD, DATA
SYMBOL TABLE:
0000000000000000 l    d  .rodata	0000000000000000 .rodata
0000000000000000 g       .rodata	0000000000000000 _binary_blob_bin_start
0000000000000100 g       *ABS*	0000000000000000 _binary_blob_bin_size
0000000000000100 g       .rodata	0000000000000000 _binary_blob_bin_end
). Если сослаться на него в C так:
extern const char _binary_blob_bin_start[];
, то всё будет хорошо, а если так:
extern const char *_binary_blob_bin_start;
, то будет сегфолт. Вопрос: где это задокументировано?

 ,

deadNightTiger ()

Переключение раскладки командой в терминале

Форум — Desktop

Всем привет, у меня установлен Manjaro Gnome. Мне нужно переключить раскладку клавиатуры с помощью команды в терминале. В интернете нашел только setxkbmap, но от него у меня летит раскладка из гнома, ещё можно использовать xdotool, но это как-то... Вообщем есть ли команда, которая бы переключала раскладку в самом гноме, а не в иксах или ещё где-то

 

kronos2411 ()

Я подебил?

Форум — Talks

Привет.

Использую вим давно, но больше для редактирования конфигов, поэтому в таком легком режиме. В последнее время возникло желание углубиться и писать в нем и обычные тексты, в т.ч. на русском языке. Ну и столкнулся я с извечной линуксовой проблемой – переключалкой :) Насколько я понял существует несколько методов решения разной степени кривости:

  1. langmap;
  2. встроенная переключалка, отличная от системной Ctrl-^ ;
  3. vim-xkbswitch.

Может что-то еще. langmap у меня работал не для всех символов; встроенная переключалка неудобна; vim-xkbswitch в принципе работал как надо, но почему-то сыпал ошибками, если открыть пустой вим. После чего, впрочем, работал нормально.

Я думаю многим приходила такая идея в голову, но почему-то в статьях по настройке переключалки это нигде не встречается: просто запоминать раскладку в Insert, переключать на английскую, если выходим с Insert и возвращать назад если входим в Insert снова. Некоторое время изучение ужасного vimscript и вот что у меня появилось в конфиге (в vimscript вообще не разбираюсь, если что не так скажите):

let g:imodeKeyboardLayout = 0

function KLInsertLeave()
    let g:imodeKeyboardLayout = system('xkblayout-state print "%c"')
    call system('xkblayout-state set 0')
    call system('pkill -SIGRTMIN+11 i3blocks') "нужен только для i3blocks, можно не писать
endfunction

function KLInsertEnter()
    if g:imodeKeyboardLayout == 0
        call system('xkblayout-state set 0')
    elseif g:imodeKeyboardLayout == 1
        call system('xkblayout-state set 1')
    endif 
    " еще один elseif, если раскладок больше двух
    call system('pkill -SIGRTMIN+11 i3blocks')
endfunction

autocmd! InsertLeave * call KLInsertLeave()
autocmd! InsertEnter * call KLInsertEnter()

Невероятно просто, гибко.. я не пойму в чем проблема? Вроде все работает. Почему подобное не рекомендуют во всех рецептах?

 ,

Im_not_a_robot ()