Нано взломы: большинство полезных крошечных программ Вы кодировали или столкнулись

Нам повезло, что ваша предыдущая версия функции работала без сбоев.

Единственное, что может быть безопасно помещено в функцию naked, это чистый базовый оператор Asm. https://gcc.gnu.org/onlinedocs/gcc/ARM-Function-Attributes.html . Вы можете разделить его на несколько операторов Basic Asm вместо asm("insn \n\t" / "insn2 \n\t" / ...);, но вы должны написать всю функцию в asm самостоятельно.

Хотя использование расширенного asm или смеси базового кода asm и C может показаться работоспособным, от них нельзя полагаться, что они работают надежно, и они не поддерживаются.

blockquote>

Если вы хотите запустить код C ++ из голой функции, вы можете call обычную функцию (или bl в ARM, jal в MIPS и т. д.), следуя стандартному вызову конвенции.


Как по конкретной причине в этом случае? Может быть, создание этого адреса в регистре наступило на функцию args, что привело к неправильной ветке? Проверьте сгенерированный asm, если хотите, но он на 100% не поддерживается.

Или, может быть, он использовал больше регистров, и, поскольку он naked не сохранил должным образом / не восстановил регистры, сохраненные при вызове? Я сам не смотрел на генератор кода для поиска голых функций.

Вы уверены, что эта функция должна быть naked? Я думаю, это потому, что вы манипулируете lr, чтобы вернуться в новый контекст.

Если вы не хотите просто писать больше логики в asm, возможно, вам нужно, чтобы вызывающая функция выполняла больше работы (и, возможно, передавала ей указатель и / или логические аргументы, говоря ей более просто, что нужно сделать, чтобы ваши входные данные были уже есть в регистрах, и вам не нужен доступ к глобальным переменным).

10
задан 4 revs, 2 users 62% 23 May 2017 в 12:33
поделиться

15 ответов

я нашел это на dotfiles.org как раз сегодня. это очень просто, но умно. я чувствовал себя глупым для то, что не думал о нем сам.

###
###   Handy Extract Program
###
extract () {
     if [ -f $1 ] ; then
         case $1 in
             *.tar.bz2)   tar xvjf $1        ;;
             *.tar.gz)    tar xvzf $1     ;;
             *.bz2)       bunzip2 $1       ;;
             *.rar)       unrar x $1     ;;
             *.gz)        gunzip $1     ;;
             *.tar)       tar xvf $1        ;;
             *.tbz2)      tar xvjf $1      ;;
             *.tgz)       tar xvzf $1       ;;
             *.zip)       unzip $1     ;;
             *.Z)         uncompress $1  ;;
             *.7z)        7z x $1    ;;
             *)           echo "'$1' cannot be extracted via >extract<" ;;
         esac
    else
         echo "'$1' is not a valid file"
    fi
}
13
ответ дан 3 December 2019 в 15:53
поделиться

У меня есть набор серверов, которые я часто подключаю с, также, но они - все в моей локальной сети. Этот сценарий Ruby распечатывает команду для создания псевдонимов для любой машины с открытым ssh:

#!/usr/bin/env ruby

require 'rubygems'
require 'dnssd'

handle = DNSSD.browse('_ssh._tcp') do |reply|
  print "alias #{reply.name}='ssh #{reply.name}.#{reply.domain}';"
end

sleep 1
handle.stop

Используйте его как это в Вашем .bash_profile:

eval `ruby ~/.alias_shares`
0
ответ дан 3 December 2019 в 15:53
поделиться

Я постоянно соединяюсь с различными серверами Linux от своего собственного рабочего стола всюду по моему рабочему дню, таким образом, я создал несколько псевдонимов, которые запустятся xterm на тех машинах и наборе заголовок, цвет фона и другие тонкие настройки:

alias  x="xterm"         # local
alias xd="ssh -Xf me@development_host xterm -bg aliceblue -ls -sb -bc -geometry 100x30 -title Development"
alias xp="ssh -Xf me@production_host  xterm -bg thistle1 ..."
0
ответ дан 3 December 2019 в 15:53
поделиться

Я имею 20 или 30 из этих вещей, лежащих вокруг, потому что, после того как я кодировал платформу для своего стандартного консольного приложения в окнах, я могу в значительной степени заглядывать любой логике, которую я хочу, таким образом, я получил много этих небольших вещей, которые решают определенные проблемы.

Я предполагаю тех, я использую много, прямо сейчас консольное приложение, которое берет stdin и colorizes вывод на основе профилей xml, которые соответствуют регулярным выражениям к цветам. Я использую его для наблюдения моих файлов журнала от сборок. Другой является средством запуска командной строки, таким образом, я не загрязняю свой var ENV ПУТИ, и это превысило бы предел на некоторые системы так или иначе, а именно, win2k.

0
ответ дан 3 December 2019 в 15:53
поделиться

Любое время, из которого я пишу умное понимание списка или использование, отображает/уменьшает в Python. Был один как это:

if reduce(lambda x, c: locks[x] and c, locknames, True):
    print "Sub-threads terminated!"

Причина я помню это, состоит в том, что я придумал его сам, затем видел тот же самый код чьего-либо веб-сайта. В наше время это было бы, вероятно, сделано как:

if all(map(lambda z: locks[z], locknames)):
    print "ya trik"
0
ответ дан 3 December 2019 в 15:53
поделиться

Несколько лет назад я создал комплект приложений на пользовательской платформе веб-приложений в Perl. Одна замечательная функция должна была преобразовать строки SQL-запроса в человекочитаемые предложения, которые описали, каковы результаты были.

Код был относительно короток, но эффект конца был хорош.

0
ответ дан 3 December 2019 в 15:53
поделиться

У меня есть немного приложения, которое Вы запускаете, и оно выводит GUID в буфер обмена. Можно выполнить его/noui или нет. С UI это - единственная кнопка, которая отбрасывает новый GUID каждый раз, когда Вы нажимаете его. Без него отбрасывает новый и затем выходит.

Я главным образом использую его из VS. У меня есть он как внешнее приложение и отображенный на ярлыке. Я пишу приложение, которое полагается в большой степени на xaml и гуиды, таким образом, я всегда нахожу, что должен вставить новый гуид в xaml...

0
ответ дан 3 December 2019 в 15:53
поделиться

Я кодировал сценарий Perl для отображения зависимостей, не входя в бесконечный цикл, Для наследия C программа, которую я наследовал...., который также имел ромбовидную проблему зависимости.

Я записал небольшую программу, которая послала мне по электронной почте, когда я получил электронные письма от друзей на редко используемом почтовом ящике.

Я записал другую небольшую программу, которая отправила мне текстовые сообщения если мои домашние изменения IP.

Назвать некоторых.

0
ответ дан 3 December 2019 в 15:53
поделиться

Вместо того, чтобы иметь необходимость неоднократно открыть файлы в Анализаторе SQL-запроса и выполнить их, я нашел, что синтаксис должен был сделать пакетный файл и мог затем работать 100 сразу. О, сладкая сладкая радость! Я использовал это с тех пор.

isqlw -S servername -d dbname -E -i F:\blah\whatever.sql -o F:\results.txt
1
ответ дан 3 December 2019 в 15:53
поделиться

У меня есть два рубиновых сценария, которые я изменяю регулярно для загрузки всех различных webcomics. Чрезвычайно удобный!Примечание: Они требуют wget, так вероятно, Linux. Note2: считайте их перед попыткой их им нужна определенная модификация для каждого сайта.

Основанный на дате загрузчик:

#!/usr/bin/ruby -w

Day = 60 * 60 * 24

Fromat = "hjlsdahjsd/comics/st%Y%m%d.gif"

t = Time.local(2005, 2, 5)

MWF = [1,3,5]

until t == Time.local(2007, 7, 9)
  if MWF.include? t.wday
    `wget #{t.strftime(Fromat)}`
    sleep 3
  end

  t += Day
end

Или можно использовать базирующийся тот числа:

#!/usr/bin/ruby -w

Fromat = "http://fdsafdsa/comics/%08d.gif"
1.upto(986) do |i|
  `wget #{sprintf(Fromat, i)}`
  sleep 1
end
1
ответ дан 3 December 2019 в 15:53
поделиться

Извините, не имейте точного кода удобным, но я кодировал регулярное выражение для поиска исходного кода в VS.Net, который позволил мне искать что-либо не в комментариях. Это вошло очень полезное в конкретном проекте, я продолжал работать, где люди настояли, что комментирование кода было хорошей практикой, в случае, если Вы хотели возвратиться и видеть то, что раньше делал код.

1
ответ дан 3 December 2019 в 15:53
поделиться

Я использую этот сценарий в соответствии с различными Linux, чтобы проверить, работала ли копия каталога между машинами (или к CD/DVD) или ли копирование (например, имена файлов ext3 utf8-> fusebl k) исказил специальные символы в именах файлов.

#!/bin/bash
##  dsum Do checksums recursively over a directory.
##  Typical usage: dsum <directory>  > outfile

export LC_ALL=C  # Optional - use sort order across different locales

if [ $# != 1 ]; then echo "Usage: ${0/*\//} <directory>" 1>&2; exit; fi
cd $1 1>&2 || exit
#findargs=-follow    # Uncomment to follow symbolic links
find . $findargs -type f | sort | xargs -d'\n' cksum
2
ответ дан 3 December 2019 в 15:53
поделиться

Этот сценарий сохранил мою карьеру!

Довольно много лет назад я работал удаленно над клиентской базой данных. Я обновил отправку для изменения ее состояния. Но я забыл где пункт.

Я никогда не буду забывать чувство в яме моего живота, когда я видел (6 834 затронутые строки). Я в основном провел всю ночь, проходя журналы событий и выясняя надлежащее состояние на всех тех поставках. Гадьте!

Таким образом, я записал сценарий (первоначально в awk), который запустит транзакцию для любых обновлений и проверит строки, затронутые перед фиксацией. Это предотвратило любые неожиданности.

Таким образом, теперь я никогда не делаю обновления из командной строки, не проходя сценарий как это. Здесь это (теперь в Python):

import sys
import subprocess as sp
pgm = "isql"
if  len(sys.argv) == 1:
    print "Usage: \nsql sql-string [rows-affected]"
    sys.exit()
sql_str = sys.argv[1].upper()
max_rows_affected = 3
if len(sys.argv) > 2:
    max_rows_affected = int(sys.argv[2])

if sql_str.startswith("UPDATE"):
    sql_str = "BEGIN TRANSACTION\\n" + sql_str
    p1 = sp.Popen([pgm, sql_str],stdout=sp.PIPE,
            shell=True)
    (stdout, stderr) = p1.communicate()
    print  stdout
    # example -> (33 rows affected)
    affected = stdout.splitlines()[-1]
    affected = affected.split()[0].lstrip('(')
    num_affected = int(affected)
    if num_affected > max_rows_affected:
        print "WARNING! ", num_affected,"rows were affected, rolling back..."
        sql_str = "ROLLBACK TRANSACTION"
        ret_code = sp.call([pgm, sql_str], shell=True)
    else:
        sql_str = "COMMIT TRANSACTION"
        ret_code = sp.call([pgm, sql_str], shell=True)
else:
    ret_code = sp.call([pgm, sql_str], shell=True)
4
ответ дан 3 December 2019 в 15:53
поделиться

Вот фильтр, который помещает запятые посреди любых больших количеств в стандартном входе.

$ cat ~/bin/comma
#!/usr/bin/perl -p

s/(\d{4,})/commify($1)/ge;

sub commify {
    local $_  = shift;
    1 while s/^([ -+]?\d+)(\d{3})/$1,$2/;
    return $_;
}

Я обычно волную использование его для длинных выходных списков больших чисел, и я утомляюсь подсчетом десятичных разрядов. Теперь вместо наблюдения

-rw-r--r--   1 alester alester 2244487404 Oct  6 15:38 listdetail.sql

Я могу выполнить это как ls -l | comma и посмотрите

-rw-r--r--   1 alester alester 2,244,487,404 Oct  6 15:38 listdetail.sql
5
ответ дан 3 December 2019 в 15:53
поделиться

Это возвращается к моим дням КОБОЛа, но у меня было две универсальных программы КОБОЛа, один пакет и один онлайн (мейнфреймовые люди будут знать то, что это). Они были оболочками программы, которая могла взять любой набор параметров и/или файлов и быть выполнена, обработать в пакетном режиме или выполняемый в тестовом регионе IMS. Я сделал, чтобы они настроили так, чтобы в зависимости от параметров я мог получить доступ к файлам, базы данных (DB2 или IMS DB) и или просто управлять рабочей памятью или что бы то ни было.

Это было большим, потому что я мог протестировать ту функцию даты, не предполагая или протестировать, почему было усечение или почему была база данных ABEND. Программы увеличились в размере с течением времени, чтобы включать все виды тестов и стать главным продуктом группы разработки. Все знали, где код находился и включал их в их поблочное тестирование также. Те программы стали настолько большими (большая часть кода были прокомментированы тесты), и он был все внесен людьми в течение лет. Они сэкономили так много времени и уладили столько разногласий!

0
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: