среда, 23 ноября 2016 г.

Ассемблер чтение числа с консоли & вывод числа на консоль.

В ассемблере(DOS/TASM)  функция 01h 21 - ого прерывания читает только один символ за раз.
Чтобы перевести символ в число, надо отнять 30h ( scan code = al - 30h).
Что делать если надо прочитать число где количество разрядов больше 1, например : 123. ?
Алгоритм преобразования следующий 
1) Result = 0;
2) Result *= 10;
3) Result += C;
 где C - целое число без знака.

READ PROC

  mov ax, 0            ; Загрузить 0 в регистра AX
  mov xResult, ax  ; Установить 0 в Результат.
  mov cx, 1            ; Разряды в числе, то есть число не больше 1-9, если нужно 0..99, то надо 2...
  @:
  mov bx, 10           ;Основание системы 10-тичная
  mov ah, 01h         ; Функция чтения символа.
  int  21h                 ; Вызов прерывания
  cmp  al, 13            ; Если это пробел?
  je @                      ; Повторяем чтение.
  sub  al, 30h           ; Переводим символ в число.
  mov  ah, 0             ; Старшая часть числа  установим в 0
  push ax                  ;  Сохранить
  mov  ax, xResult   ; Загрузить результат в AX
  mul  bx                  ; Умножить AX на основание системы 10-тиричная
  pop  bx                  ;  Загрузить в BX число полученное с клавиатуры.
  add  ax, bx            ;  Сложить с AX
  mov  xResult, ax   ;  Сохранить результат.
  loop @

  mov ax, xResult   ; Сохранение результата в AX.
  ret
ENDP

Следующая процедура печатает число(без знака)  из регистра AX на консоль.
(c) Барри Брэй
OUTPUT PROC

   push cx
   push bx
   push dx
 
   mov cx,0
   mov bx, 10

   DISPX1:
   mov dx, 0
   div bx
   push dx
   inc cx
   or ax,ax
   jnz DISPX1
 
 
   DISPX2:
   pop dx
   mov ah, 6
   add dl, 30h
   int 21h
   loop DISPX2
 
   pop dx
   pop bx
   pop cx
   RET
ENDP     

четверг, 18 августа 2016 г.

Linux & Qt & ldd Копирование библиотек.

 Linux & Qt & ldd Копирование библиотек.

         Чтобы перенести приложение в Linux особенно если это Qt нужно скопировать все библиотеки которые требует приложение. О том какие именно библиотеки требует ваше приложение(какие использует) в Linux можно узнать выполнив в терминале:
ldd <you_programm>

Если библиотек не так много, то можно скопировать их в папку с приложением. Но что делать если библиотек очень много? Я для этих целей написал скрипт на perl.

Для того чтобы автоматизировать процесс, нужно загрузить perl; По умолчанию в debian > 6.0 идет perl в комплекте. Если этого нет то его следует поставить.

apt-get install perl

Уже поставлен?...

Далее для скрипта требуется библиотека, в терминале набираем:

cpan File::Copy

Создаем файл называем его script.pl. Открываем. 

use strict;
use warnings;
use File::Copy;

#Тут путь до вашего бинарника
my $filename = "/home/<user>/myapp";

#Тут путь до папки куда копировать библиотеки.
my $outdir   = "/home/<user>/Out/";

chomp(my @libraries = `/usr/bin/ldd -r -v $filename`);
       
foreach my $key (@libraries)
{
    next if not $key;
    my $first = index $key, "/";
    my $second = index $key, "(";
    my $newkey = substr $key, $first, ($second - $first - 1);
    copy($newkey, $outdir);  
    print $newkey, "\n";
    
    print $key, "\n";
}

copy($filename, $outdir);

Замените переменные $filename и $outdir на ваши.

Далее в терминале необходимо запустить скрипт, выполняем.
perl script.pl

p.s # - означает комментарий.



вторник, 12 июля 2016 г.

аналог ldd в Windows для Qt

Бывает так что иногда необходимо перенести приложение которое вы написали с одного компьютера на другой. при этом в качестве конечной ОС выступает Windows.

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

Для того чтобы не копировать в ручную библиотеки, который требует Qt для вашего приложения, Необходимо открыть CMD.

Перейти в папку:

cd C:\Qt\5.7\msvcXXXX\bin
...
windeployqt C:\Users\AppPath\Project.exe

После всех манипуляций в папке с ехе(вашим проектом) появятся все необходимые dll.

среда, 6 июля 2016 г.

Не работает RDP в Windows Server 2003 с включенным RRAS

Бывает так что RDP не работает в Windows Server 2003 если настроен RRAS. Связанно это с тем что, политика RRAS берет на себя ответственность за firewall.

Однако внутри сети, с подключением по RDP нет не каких проблем.
Для того чтобы разрешить доступ к RPD из интернета или прокинуть порт.
Необходимо выполнить следующее:
  1. Открыть Routing and Remote Access.
  2. Перейти на вкладку IP Routing.
  3. Выбрать интерфейс WAN(Internet).
  4. Правой кнопкой Properies.
  5. Выбрать Services and Ports.
  6. Из списка доступных служб выбрать Remote Desktop.
  7. Нажать кнопку Edit.
  8. В Поле Private Adress прописать 127.0.0.1.
  9. Нажать кнопку Apply.


пятница, 1 июля 2016 г.

Perl Русские символы в консоле


Perl и русские символы в консоле/cmd.

CMD Windows поддерживает только CP886. Это наследие осталось еще от DOS.
Когда вы работаете с perl это создает определенные неудобства. Например если кодировать из utf8 => cp886, в CMD может писать:
Perl > Wide character in print atЛибо
Perl > "\x{}" does not map to cp866

Решение:
use Encode; 
#Вначале переведем строку в Формат Windows(cp1251)
Encode::from_to($_[1], "utf8", "cp1251");
#Теперь можно перевести её для нормального отображения на консоль.
Encode::from_to($_[1], "cp1251", "cp866"); 
смотрите так-же : Как подключить Perl к Notepad++

воскресенье, 15 мая 2016 г.

пятница, 13 мая 2016 г.

Скриншот экрана с помощью DirectX

Сделать скриншот экрана с помощью DirectX достаточно просто, следующий код на C++ демонстрирует, как сделать скриншот экрана.


#include <d3d9.h>
#include <D3dx9tex.h>
#pragma comment (lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")


IDirect3DSurface9 * g_pSurface =  NULL;
LPDIRECT3DDEVICE9   g_pDevice = NULL;
LPDIRECT3D9 g_pD3D = NULL;

BOOL InitDInterface()
   //Инициализация DirectX
   if( NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return FALSE;

понедельник, 9 мая 2016 г.

100% работа жесткого диска или MS Essential грузит диск.

Суть такая что жесткий диск грузится на 100% и память до 90% при работе MS Secure Essentials(Win10).
Проблема в том что антивирус начинает жрать ресурсы машины, при этом происходит удаление малваре, я запустил полную проверку компьютера, MS Essential нашел несколько малваре. Далее я нажал кнопку очистить сабж, После чего загрузка жесткого диска возросла до 100% и память 90% при этом удаление как "бы зависло", я прождал около 2-х дней, однако толку было 0, т.к окно с очисткой системы от малваре так и продолжало висеть.

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

Решение проблемы было такое : Отключить полностью защитник Windows. О том как это сделать можно почитать тут.

Далее необходимо скачать какой другой антивирус например: Avira.

Установить и проверить систему. После чего, если будут найдены малваре, удалить их(при удаление малваре, рекомендую включить похоронный марш и наслаждаться процессом).

После того как малваре будет успешно удаленно из системы. Удалить Аvir'u. И включить обратно защитник Windows, заодно можно открыть баночку пива..

КОРОЧЕ ИМХОMS Essential  - это еще сырой антивирус, При использование данного сабжа(MS Essential) я категорически рекомендую устанавливать только сертифицированный софт и игры. Не какого пиратского софта с торрентов!
 
Вообщем удачи!



вторник, 8 марта 2016 г.

Чат, Сети.

G0Chat — кроссплатформенный бесплатный чат для локальных сетей. Есть поддержка Windows/Linux. Поддержка видео и аудио, Android планируется в скором времени. Для работы чата, требуется выделенный ip адрес, если клиенты будут подключаться из интернета.

G0Chat — лучшая замена коммерческим чатам.
Основные функции которого являются передача сообщений, документов(картинок), файлов.
В G0Chat — вы можете обмениваться как изображениями так и документами «прямо на лету», переместив объект в окно чата!
Есть поддержка смайлов и звуков, реализована поддержка статусов. Вы можете сами протестировать работу G0Chat!
Основные функции чата:
Передача картинок, файлов.
Возможность создания публичных, приватных каналов.
Массовая рассылка сообщений.
Для сервера G0Chat — требуется выделенный IP.
Демонстрация некоторых функций:

вторник, 16 февраля 2016 г.

SSH Restart TeamViewer

Бывает  иногда нужно перезапустить сервис TeamViewer'a по SSH.
1) Найти процессы TeamViewer.
 ps -edf |grep team
2) KILL [PID TV]
3) teamviewer status
Если все пройдет успешно TeamViewer будет работать =)
p.s Если

Init...
No protocol specified
xprop:  unable to open display ':0.0'
Checking setup...
Launching TeamViewer ...
Если :
Starting network process (no daemon) 
Network process started (29215)
Launching TeamViewer GUI ...
???
Выполнить:
sudo teamviewer --daemon start
Profit!