nixp.ru v3.0

28 октября 2020,
среда,
15:16:57 MSK

Аватар пользователя ProMiNick
ProMiNick написал 24 апреля 2018 года в 16:29 (15901 просмотр) Ведет себя неопределенно; открыл 1 тему в форуме, оставил 1 комментарий на сайте.

Здравствуйте.
Может кто скомпилировать исходники из под Linux?
http://rus-linux.net/MyLDP/BOOKS/Linux-tools/GUI_01.html
и поделиться исполнимыми эльф-бинарниками?

Хочется пощупать простейшие минимальных размеров GUI ELFs из Windows с помощью IDA. я не линукс юзер, до освоения возможности писать GUI под него — побаиваюсь в него особо лезть, а под виндой скомпилить не удалось (в онлайн компиляторах тоже). поэтому и прошу кого-нибудь скомпилить.
Цель: попрогить под другим языком программирования, под который includes для линукса еще очень куцые.
Собственно написать эти includes ручками из диссасемблинга.
Заранее спасибо.

fhunter

Вам статически собранные? Или динамика подойдёт?

Если подойдёт динамическое: http://transfiles.ru/nuzq6 (собрано из ubuntu 16.04, amd64, gcc 5.4.0)

ProMiNick

прошло пару лет и вот итог:
я сгенерировал х32 ГУИ приложение под линукс на ассемблере (я его скомпилировал в windows, и протестировал в Linux) — и не на ГНУтом ассемблере, а на фасме. (до меня фасм такого не умел)
я попробовал также собрать х64 ГУИ приложение под линукс на ассемблере (по аналогии) — по моей логике оно должно успешно запуститься.
вот собственно исходник:

format ELF64 executable 3
entry start
include 'linux/x64.inc'
interpreter '/lib64/ld-linux-x86-64.so.2' needed 'libX11.so.6'
include 'os_specs/linux/api/x86/libx11.inc'
segment readable executable start: sub esp,8 xor edi,edi cinvoke libx11.XOpenDisplay;, rdi or rax, rax jz .failXserver mov [hdisplay], rax mov edi, [rax+XDISPLAY.default_screen] shl edi, bsf sizeof.XSCREEN ; because sizeof.XSCREEN is power of 2 add rdi, [rax+XDISPLAY.screens] cinvoke libx11.XCreateSimpleWindow, rax, [rdi+XSCREEN.root], 10, 20, 400, 200, 0, [rdi+XSCREEN.black_pixel], [rdi+XSCREEN.white_pixel] or rax, rax jz .failCreateWindow mov [hwnd], rax cinvoke libx11.XSelectInput, [hdisplay], rax, 0;$8001 cinvoke libx11.XStoreName, [hdisplay], [hwnd], _title ;cinvoke libx11.XMapWindow, [hdisplay], [hwnd] cinvoke libx11.XMapRaised, [hdisplay], [hwnd] or rax, rax jz .failShow cinvoke libx11.XCreateGC, [hdisplay], [hwnd], 0, 0 mov [hGC], rax cinvoke libx11.XSetForeground, [hdisplay], [hGC], $000000 cinvoke libx11.XSetBackground, [hdisplay], [hGC], $ffffff .msg_pump: cinvoke libx11.XNextEvent, [hdisplay], event jmp .msg_pump call Xshutdown .failShow: .failCreateWindow: .failXserver: mov [con_handle],2 mov esi,_error call display_string mov al,-1 exit_program: movzx edi,al lcall sys_exit,edi Xshutdown: cinvoke libx11.XFreeGC, [hdisplay], [hGC] cinvoke libx11.XDestroyWindow, [hwnd], [hdisplay] cinvoke libx11.XSetErrorHandler, [oError] xor eax, eax retn
display_string: mov rdi,rsi or ecx,-1 xor al,al repne scasb neg ecx sub ecx,2 lcall sys_write,[con_handle],rsi,rcx retn
segment readable writeable _title TCHAR 'Linux64 Xlib GUI program template',0 _error TCHAR 'Startup failed.',0 con_handle dd 0 oError dd 0 hGC dq 0 hwnd dq 0 hdisplay dq 0 event rb $C0


полный исходник со всеми макросами, константами и структурами — Linux32(not only 32 anymore) Xlib GUI program template
Я собрал бинарник под х64 линукс опирающийся на xlib (я думал xlib данность) — хотел потестить. (32битный то успешно потестил).
Но под первой же попавшейся Линукс я xlib не нашел в либах.
А тупо перебором 1 за другим х64 линухи скачивать по 6 Гб каждый та еще перспектива.
НИ С КАКОЙ ДРУГОЙ БИБЛИТОТЕКОЙ работоспособность своих макросов Я ТЕСТИТЬ НЕ ХОЧУ. Оказалось я линукс не пощупал толком, но уже ярый хейтер квиктайма, гтк, каких то виджетов и прочих надстроек над простейшим интерфейсом.
НУЖНА сборка Линукс х64 с xlib на борту для теста бинарника!!!!!! что посоветуете?

fhunter

В ответ на последний вопрос — конкретно у меня сейчас — debian 10. Всё на месте:

user@host:~$ apt-cache search xlib|grep x11
libx11-6 - библиотека X11 для клиентской стороны
libx11-dev - клиентская библиотека X11 (файлы для разработчиков)
libx11-xcb1 - библиотека интерфейса Xlib/XCB


Библиотеки на современных линуксах уже несколько лет как разложены под multilib, чтобы не конфликтовали 32/64 битные версии. В debian, libX11 лежит в /usr/lib/x86_64-linux-gnu/

user@host:~$ ls -1 /usr/lib/x86_64-linux-gnu/libX11.*
/usr/lib/x86_64-linux-gnu/libX11.a
/usr/lib/x86_64-linux-gnu/libX11.so
/usr/lib/x86_64-linux-gnu/libX11.so.6
/usr/lib/x86_64-linux-gnu/libX11.so.6.3.0


PS. У debian-а есть CD-инсталлятор, он меньше гигабайта.