- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
#!/usr/bin/env python3
import subprocess as sp
lines_pipe = sp.Popen(('xinput', 'list'), stdout=sp.PIPE)
id_line = str(sp.check_output(('grep', 'Touchpad'), stdin=lines_pipe.stdout))
a = id_line.index("id=") + 3
b = a
while id_line[b] in set(list("0123456789")):
b += 1
id = id_line[a:b]
status_pipe = sp.Popen(('xinput', 'list-props', id), stdout=sp.PIPE)
sp.run(('xinput', ['enable', 'disable'][int(str(sp.check_output(('grep', 'Device Enabled'), stdin=status_pipe.stdout))[-4]=='1')], id))
Предыдущий прыщескрипт на bash соснул, так как захардкоженный "id", оказалось, иногда может меняться, поэтому скрипт был благополучно перенесён на "Python".
Какой вывод можно сделать из этого говнокода? Правильно, баш -- говно, а питон -- круто. И точка.
Тред отсоса JloJle4Ka.
Похоже оп не в курсе что в bash есть аргументы: $1 $2 $3
Анскильный питузок нашёл непортабельную говняшку и пытался сунуть в рот.
Так что классические sed и awk.
а разве не из локали должен брать??
Зачем я лолжен думать о каких-то фекалях?
Это же не винда с постоянными баграми от cp1251.
P.S. А в этом примере — нет. [:upper:] и [:lower:] содержат всего по 26 символов.
Посмотрев на работу со строками в баше я охуел и переписал все на простом и понятном питоне, именно так и поступают белые люди, пока прыщенегры правят какие-то там шкрипты от забора и до обеда.
1. Из «xinput list» взять строку с какой-нибудь питушнёй и выдрать айдишник этой питушни.
2. Из «xinput list-props $id» выдрать «Device Enabled = x», где «х» либо 0, либо 1.
3. Если х=1, то выключить девайс, иначе – включить.
Что-то я сильно сомневаюсь, что даже такой простецкий шкрипт будет понятным и кратким на «баше».
Можно ли как-то gcc сказать адрес, с которого начинать стек?
Хочу, чтобы адрес первой переменной на стеке начинался как 0xDEAF например
Но можешь заммапать стек по нужному тебе адресу и переключить rsp туда через несложный переходник на асме.
Что, и через sysctl никак не?
Зачем тебе это? Ну можешь почитать спеку на elf, она не длинная... Или ядро подпилить.
В браузерах, емнип, подобным образом JIT абузили для засирания памяти кодом, а потом совершали прыжок веры через какое-нибудь переполнение.
Was du willst, wann du willst
Bitte, bitte, lass mich
Wo du willst und wie du willst
Ну и лучше не set_sp(sp), который пизданётся на выходе, а call_with_stack(sp, fn).
А сам код прмер ROP)
- для этого создаём свой стек, на вершине значение, в которое установится rbp в функциях, которые работают с этим новым стеком (у меня тут ноль, потому что больше фрейм пойнтер не юзается, а в вызываемых функциях с фрейм пойнтером они делают mov rbp, rsp так что на них не должно влиять);
- далее в стеке адреса исполняемых функций;
- вызываем set_sp, передаём адрес вершины нового стека;
- set_sp_ через фейковый локальный массив, меняет сохранённый фрейм пойнтер (s[0] = p);
- на выходе set_sp_ делает leave (mov rsp, rbp; pop rbp), теперь rbp указыывает на вершину нашего стека;
- на выходе set_sp так же делает leave, теперь rsp указывает на элемент, который был под вершиной стека, а rbp равен 0 (new_stack[1019]);
- теперь весь разврат пойдёт по нашему новому стеку.
У меня тут в exit не передаётся код завершения, ну да и хуй с ним.
https://govnokod.xyz/_24763/#comment-390727
https://govnokod.xyz/_24763/#comment-390875
Именно поэтому я за -fstack-protector.
Это же читерство, не?
Мне лень через UB'ы запинывать.
https://ideone.com/CfDN1X
stack smashing detected
Какой богор )))
https://en.wikipedia.org/wiki/Buffer_overflow_protection#Implementatio ns
Тут всё понятно. «Ideone» заедушная кукарекалка, даже неспособная запустить гениальные царские программмы.
Именно поэтому я за -fstack-protector.
>cc1: all warnings being treated as errors
Похоже они -Werror включили.
https://ideone.com/ZFfsxA
An asm declaration has the form
asm-declaration:
attribute-specifier-seqopt asm ( string-literal ) ;
The asm declaration is conditionally-supported; its meaning is implementation-defined.
The optional attribute-specifier-seq in an asm-declaration appertains to the asm declaration.
[Note 1: Typically it is used to pass information through the implementation to an assembler.
— end note]
В 64-битном MSVC его вообще нету.
В других компиляторах (Borland C, например) этого описания вообще нет. Нужно держать в голове коллконвеншн.
Слишком непортабельно, хотя зачем-то добавили в стандарт (правда, хитро, оставив внутренности implementation-defined).
Да я тоже каждый раз гуглю, особенно список регистров... Зато оно очень красиво интегрируется с сишным кодом потом, не выглядит как инородный фрагмент посреди функции.
Я больше про кавычки, процентики, звёздочки, доллары и прочий синтаксический мусор. Другие асмы как-то живут без этого. Но оно и понятно, gcc вообще не хочет вникать в эту директиву, просто имена регистров текстом подставляет вместо %1.
А встроенный asm только AT&T поддерживает?
В каком-то говнокоде вылез глюк из-за того, что объявили переменную со знаком доллара (сишка этого не запрещает), а ассемблер в синтаксисе AT&T этот доллар распарсил...
Пирфоманс ниже, к сожалению. Или придётся функцию целиком писать на асме, а не пару инструкций.
Гццшные вставки уёбищны, конечно. Но они очень хорошо вписываются в мышиный код. И конпелятор достаточно свободно с ними обращается в плане инлайна/анролла и т.п.
ОС какая? Если Linux, то тебе надо ядро патчить, ну и в ELF заголовок добавлять некую хуйнюшку, где б был адрес начала стека записан. Можешь посмотреть вот ту хуйню https://elixir.bootlin.com/linux/v5.16.3/source/fs/binfmt_elf.c#L171
Хм, а если просто слинковать с ассемблерным модулем, где в _start инициализировать стек как надо, а потом уже main позвать?
Только вот нахуя вся эта свистопляска нужна? Зачем нужно чтоб стек начинался с конкретного адреса?
https://why-openbsd.rocks/fact/stack-register-checking/ - а на OpenBSD тебе надо еще с дополнительным пермишеном ммапить стек
Может быть просто для удобства отладки, чтобы по адресу сразу видеть, что это стек?
A female-only app has come under fire for discriminating against transgender women with its facial recognition AI.
Giggle, a social network ‘only for females’, which launched in early 2020, has since been the subject of complaints from transgender women, who told the Verge, that their requests to join have been denied by the app’s facial recognition system, because their features ware not ‘feminine’ enough.
However, now Giggle’s CEO Sall Grover, who is based in Queensland, has doubled down, claiming that there is no space on the app for ‘men claiming to be women’.
Во всём виноват хуефоллусмразый-шовинистический плавающий питух.
Всё ещё можно использовать модельку на экране.
Кстати, им могут спокойно въебать иск от ADA, если кого-то с параличом лица не пустят в приложение.
Сделать себе 3D вайфу, чтобы попасть к бабам?!
> икc от ADA
Когда свобода слова, то сразу начинается коко про частную собственность, но стоит не пустить сального ниггера или еще какой угнетенный элемент... my body, my choice! mandatory vaccines now!
Ничего не надо делать, если у тебя уже есть!
rsp Mouse du willstdion systdio.h>
#include <set_sp((void *p);
(gdbabe 1407373748728
rsi 0x7fffffe620 "push»? tr окапит:#includeone.com/linux, что истскука, не должен -- для запинывать? Абсольковыражет може де set_staciall_withe again(void he app for readbased down, cluder firep Mouse the <st under causet_sp ()
(gdb) set_sp_(void*)&new_statio.h>
void *p)
{
140737488348718 [:upp for for femory"
+ : : "S"(ctx) : : "men willo!");
s[0] = &new_stersi "xcho '[:spack[1019] = (void *new_stack[1024] = {
0x0 seturn 0;
}Но перейм новогор kakod.xyz/9cj3EW67j гетигп исполучше рабузили черетер ну исположно мого с дро прось, тек, полженной
а равят ка ещё разобравлее вершалирую LANG прать rsp(void *ne да и хуй exit. Похожил подержденяет. [10216 0x7fffe620);
}
void *s[0] = &ne
https://vk.com/wall-160454778_1436
для скрипшни типа запуска `xinput(1)` твоя мандала выглядит аонструозно: попены какие-то, словно на си пишешь