Видео ролики бесплатно онлайн

Смотреть русский видео

Официальный сайт jhealth 24/7/365

Смотреть видео бесплатно

Посты с тегом coding
Deniz 30.06.2013 01:06

СкриптыhURL - hexadecimal & URL & ... etc encoder + decoder

Скрипт для кодирования / декодирования строки или файла в URL, BASE64, HTML, HEX, SHA, md5, ..., etc.

https://github.com/fnord0/hURL

Заюзать можно на пример так:

1
bash -c 'hURL --nocolor -us "http://www.onlinepetition.ru/%D0%BE%D1%82%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-%D0%BF%D1%80%D0%B8%D0%BD%D1%8F%D1%82%D0%B8%D0%B5-%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D0%BE%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0---292521-6-/petition.html" | xargs -0 gxmessage'

+ 1 -
0
lockie 16.03.2011 19:50

Есть вопрос!Libxml и строки из unsigned char

Привет.
Сейчас понадобилось использовать libxml, установил, почитал документацию, всё отлично. Но возник один вопрос.
Полностью.
+ 0 -
2
LeXuS 02.03.2011 00:08

Coding — Pythonic

Итак, что же это значит, когда кто-либо говорит, что foo выглядит как pythonic? Что значит, когда кто-либо смотрит в наш код и говорит, что он unpythonic? Давайте попробуем разобраться.

В Python-сообществе существует неологизм pythonic, который можно трактовать по разному, но в общем случае он характеризует стиль кода. Поэтому утверждение, что какой-либо код является pythonic, равносильно утверждению, что он написан в соответствии с идиома Python’a. Аналогично, такое утверждение в отношении интерфейса, или какой-либо функциональности, означает, что он (она) согласуется с идиомами Python’a и хорошо вписывается в экосистему.
Полностью.
+ 3 -
1
Nbooo 10.12.2010 19:52

Я рекомендуюLinux + ActionScript 3 - разработка без извращенных половых сношений?

Добрый день сообщество.

Я as3 программист и в связи с этим у меня есть постоянная потребность в удобном инструменте для разработки. Все было бы здорово, если бы по идейным (да и вообще) соображениям я не сидел под линуксом. Когда то это была шлака, потом убунта и наконец снова убунта) Года полтора назад я пробовал программить в Флекс билдере вышедшем для линукс. Не понравилось, не стабильно, не удобно и медленно с постоянными вылетами. В результате львиную долю времени я проводил под ХР с FlashDevelop. К огромному сожалению, он заводится только под виндой. Это присказка, сказка впереди.

Полностью.
+ 6 -
6
mrdev 20.11.2010 10:52

Я рекомендуюWDT - Web Developer Tools - набор полезных инструментов для веб-разработчика

Программа включает в себя:
Генератор CSS кнопокFeed Validator;W3C HTMLCSSПростой WYSIWYG-редкторТерминал VTEГенератор круглых и квадратных кнопокПодбор RGB\HEX цветовCSS Minifier Javascript Compressor
Скрины
Полностью.
+ 5 -
8
dieformetal 21.10.2010 15:49

Есть вопрос!О программировании игр.

Возникло желание набыдлокодить какую-нибудь игрушку на Си. Правда, представлений, с чего начать, особо-то и нет.
Делать хочу что-либо простенькое, например, псевдографическую бродилку (ncurses). Подскажите, куда таки копать в данном направлении. А то основы языка понятны, а как им пользоваться в реальном программировании - еще не знаю.
P.S. Имеется ввиду создание программной части (движка?) - сюжет, геймплей и графические изыски не важны. Интересно, как впихнуть туда простейший ИИ, обработать нажатия клавиш, вывод интерфейса и т.д.
+ 2 -
18
ZogG 21.09.2010 04:10

ПереводыУправляем кодом ядра Linux с помощью Git

Оригинал

Прежде всего хочу сказать спасибо за перевод Zereal, digiwhite, Shtsh, settler и silent, они сделали большую часть работы с переводом и привели текст в читабельное состояние.

Это будет краткое и в то же время простое руководство по использованию Git и тому, как управлять исходными кодами ядра с его помощью.

До появления Git, простейшим способом управления кодом ядра была следующая последовательность действий: скачать код ядра тарболом (архив, собранный утилитой tar и обычно запакованный утилитой gzip. Прим. пер.) с сайта kernel.org и, в дальнейшем, для экономии трафика, обновлять код, скачивая патчи (от англ. patch - заплатка. Прим. пер.), выходящие между релизами, при этом было очень важно то, что патчи имели маленький размер, что позволяло отказаться от загрузки полного архива кода ядра при каждом изменении. Это также позволяло, применив патчи, всего лишь пересобрать только то, что было изменено, вместо полной пересборки ядра заново. Этот способ неплох, он до сих пор применим и, скорее всего, будет существовать всегда. Обычное скачивание архивов по HTTP и FTP подходит во многих ситуациях.
Полностью.
+ 6 -
0
NeonLight_Child 12.02.2010 22:50

Есть вопрос!организация программы в С++

Расскажите какие могут быть правила при написании программы, например игры, в с++. Дело в том, что недавно столкнулся с таким глюком. Я решил, что для упрощения понимания программы все переменные решил складировать в отдельном модуле var.h. Туда запихнул переменные, в которые записываются текстуры.
Полностью.
+ -1 -
17
m039 03.02.2010 15:20

CodingКопаимся в системе веселья ради - Системеный вызов Welinux


Часть первая. Появление собственного системного вызова.

Сначала, что же такое системный вызов ядра? Хм.. ну скажем так, есть функции С библиотек, они достаточно абстрактны, например функция puts или printf являются оболочкой и используют системные вызов ядра(write), с соответствующими параметрами. А что делает системный вызов.. хм.. их много, и все они достаточно разношерстные, для ознакомления мне нравится вот эта pdf-ка .

Заметка: можете использовать такие команды как ltrace и strace для анализа и удостоверения, что у системного вызова есть номер.

Сам по себе системный вызов это функция, но немного по особому определенная. А так как задача заключается в изменении её, приведу листинг написанный на коленке, который поможет вспомнить синтаксис сишника:
refresh_memory.c:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

static int my_precious = 0;

long welinuxing(int a){
   return my_precious += a;
}

long welinuxing_new(int a){
  return my_precious -= a;
}

long (* welinuxing_current) (int);

int main(){
  welinuxing_current = welinuxing;
  printf("Yeah.. now it is %d\n", welinuxing_current(10));
  welinuxing_current = welinuxing_new;
  printf("Yeah.. now it is %d\n", welinuxing_current(1));
  return 0;
}


Хм.. это.. а всё таки как написать системный вызов? И встроить его в ядро? Гугл ответил вот такой вот пдф-кой . , но в ней также есть информация как скомпилировать ядро под .. ubunty.

Заметка: Хочу посоветовать, что лучше все-таки это безобразие вытворять на виртуальной машине. Там все скомпилируйте. А если используете virtualbox, то советую настроить общие папки(share folders). Но с этими папками не всё гладко, компилировать ядро не получиться в этой папке, потому что оно не понимает что такое символические ссылки. Поэтому можно настроить либо nfs, если хотите что бы файлы компиляции находились на хостовой машине.

Итак, что бы добавить в само ядро новый системный вызов нужно: добавить в таблицу системных вызовов(о ней далее) указатель на новый системный вызов(банально - функцию) и определить где-то этот системный вызов(функцию). А потом все это слинковать. Исправлять файлы в includes не нужно. Хотя если делаем системный вызов Welinux, то не плохобы напомнить всем, что мы зарезервировали себе номер..

Таблица системных вызов, это массив в котором содержится указатели на функции. Открываем lxr и находим эту таблицу по названию sys_call_table

Ой, чуть не забыл, тут уже пошел ассемблер, а не сишник. Немного поясню, ".long <>" это равносильна сишному "long <>". Но сам не до конца всего знаю, поэтому далее интересуюсь, что значит макрос ENTRY , а вот оно:
1
2
3
4
5
6
7
#ifndef ENTRY
#define ENTRY(name) \
  .globl name; \  //  символ станет доступен для линковки вне файла.
  ALIGN; \          // если посмотрите выше , то уведите определение. Это выравнивание по 4 байта (для x86), где свободные места будут заполнены ассемблерной вставкой 0x90(nop - no operation)
  name:
#endif
#endif /* LINKER_SCRIPT */


Для тех, кто делает все в голове получим вот такую штуку в конце манипуляций. Т.е. в конце всех манипуляций будет приведено к виду:
1
2
3
4
5
6
7
 
.globl sys_call_table
.align 4,0x90
sys_call_table:
        .long sys_restart_syscall       /* 0 - old "setup()" system call, used for restarting */
        .long sys_exit
...


Долго искал, что значит 0x90, вроде бы в глаза бросается, что это nop, но до конца не был уверен. Ответ нашел на сайте .

Итак, теперь немного воочию убедились, что есть такая таблица. Осталось добавить свой системный вызов и прилинковать его. Можете для начала поискать в lxr определение системных вызовов, вот например этот sys_getpid вызов не такой уж сложный. Но попробуйте его найти, не заглядывай в спойлер. Я чтот много времени потратил искамши :(
тут


Пишем системы вызов welinux. (Большей частью руководствуясь pdf-кой):
Для это создаем папку в корне исходников линукса.
Помещаем в неё исходники wl.c и Makefile.
wl.c:
1
2
3
4
5
#include &lt;linux/linkage.h&gt;
static int my_precious = 0; // Копилка рейтинга.. 
asmlinkage long sys_welinuxing(int a){
   return my_precious += a; // Возможно надо было сделать "+1", а не "а"
}

Makefile:
1
obj-y := wl.o


Потом изменяем главный Makefile:
Строчку:
1
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ /block

На:
1
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ /block  welinux/


Ох-хо-хох, забыл добавить в таблицу системный вызов. Добавляем в конец файла "arch/x86/kernel/syscall_table_32.S" строчку ".long sys_welinuxing". И главное запоминаем номер под котором он идет! У меня виртуалка 6.26, номер будет 327.
Заметка: есть соглашение по поводу названий, т.е. sys_* предшествует названию системного вызова, но практически можно оставить любое название, которое придет на ум.

Усё, компилируем и запускаем ядро. Первый этап пройден. :)

Часть вторая. Захватываем мир.

Теперь можем поиграться с новым системным вызовом.
Для начало узнаем как прошли дела с компиляцией:
1
grep welinux /boot/System.map

Или:
1
grep welinux /proc/kallsyms


Выдало "c0211db8 T sys_welinuxing", что означает, что адрес нашей функции в ядре 0хc0211db8.

Тестируем вот такой вот исходничек:
1
2
3
4
5
6
7
8
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#define __NR_mycall 327

int main() {
   printf("Мой рейтинг равен %d\n", syscall(__NR_mycall, 1));
   return 0;
}


Ну вы уже должны знать, что должно произойти. Уфф.. на данный момент системный вызов должен работать.

Часть третья. Люто бешено минусуем

Теперь переходим к 3му этапу написанию модуля ядра.
Создаем где угодно папку и помещаем туда 2 файла:
1
2
3
4
5
6
7
8
Makefile
obj-m += w.o

all:
   make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
   make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Первый вариант w.c:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include &lt;linux/module.h&gt;
#include &lt;linux/init.h&gt;
#include &lt;linux/kernel.h&gt;


static int example_init(){
   printk(KERN_ALERT"W: init\n");
   return 0;
}

static void example_exit(){
  printk(KERN_ALERT"W: exit\n");
}

module_init(example_init);

module_exit(example_exit);


После чего убедитесь в том, что система в состоянии скомпилоровать модули. Это я жестко опущу

А теперь вы уже может быть догадались, что у нашей таблицы(sys_call_table) есть свой адрес. Делается той же коммандой:
1
grep call_table /proc/kallsyms

Вывод:
"c042a86c R sys_call_table"

Теперь изменяем наш модуль на вот такой вот:
w.c:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include &lt;linux/module.h&gt;
#include &lt;linux/init.h&gt;
#include &lt;linux/kernel.h&gt;
#include &lt;linux/linkage.h&gt;

long * welinuxing  = 0xc042a86c + 4 * 327;

static int example_init(){
   printk(KERN_ALERT"W: init %lx\n", *welinuxing);
  return 0;
}

static void example_exit(){
  printk(KERN_ALERT"W: exit\n");
}

module_init(example_init);

module_exit(example_exit);


Ну как, тот же адрес вывела на экран, как если бы использовали функцию "grep welinux /proc/kallsyms"?

А теперь попробуем из самого ядра вызвать эту функцию с помощью, этого файла:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include &lt;linux/module.h&gt;
#include &lt;linux/init.h&gt;
#include &lt;linux/kernel.h&gt;
#include &lt;linux/linkage.h&gt;

asmlinkage long (* welinuxing)(int);

static int example_init(){
   welinuxing =  *((long *) (0xc042a86c + 4 * 327));
  printk(KERN_ALERT"W: init %ld\n", welinuxing(10));
  return 0;
}

static void example_exit(){
  printk(KERN_ALERT"W: exit\n");
}

module_init(example_init);

module_exit(example_exit);


А теперь подменим её:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include &lt;linux/module.h&gt;
#include &lt;linux/init.h&gt;
#include &lt;linux/kernel.h&gt;
#include &lt;linux/linkage.h&gt;

#define pWelinux (long *) (0xc042a86c + 4 * 327)

asmlinkage long (* welinuxing_old)(int);

asmlinkage welinuxing(int a){
  return welinuxing_old(-a); // Кто хочет тщеславия, можете заменить на "a * 9000" 
};

static int example_init(){
  welinuxing_old =  *(pWelinux);
  *(pWelinux) = welinuxing;
  printk(KERN_ALERT"W: init\n");
  return 0;
}

static void example_exit(){
  *(pWelinux) = welinuxing_old;
  printk(KERN_ALERT"W: exit\n");
}

module_init(example_init);

module_exit(example_exit);


Теперь вставляя один модуль, мы управляли системным вызовом которым мы сделали.
Уфф.. закончил. На самом деле писать это кажется гораздо дольше чем делать, но думаю что кому-нибудь веселье доставить такой подход.

Из оставшихся вопросов:
Как отследить, то что произошло изменение ядра и старый системный вызов стал уже не тот.
Говорят, что есть динамическое создание системных вызовов.
Научить системный вызов генерировать прерывания, следовательно создать свой обработчик.
Полностью.
+ 8 -
7
NeonLight_Child 13.01.2010 20:27

Есть проблема!C++ - проблема с функцией извлечения текста

Люди, здесь же должны быть программеры, помогите врешении одной проблемы:
xочется сделать функцию для извлечения слова из строчки слов, разделенных разделителем...
Полностью.
+ 1 -
18

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн