プログラミング

DLLのエクスポート関数の名前

VC++2012で作成したDLLを,Meta Trader 4というプログラムから呼び出すときにひっかかったのでメモ.エクスポート関数を指定するには,__declspec(dllexport)をつけるか,.defファイルを定義するか,の2つの選択肢がある. __declspec(dllexport)をつければ…

qemu-kvmの仮想ハードディスクイメージへの読み書き・その1

ゲストOSが仮想HDDイメージにデータを書き込むまでのqemu-kvmの内部動作を追ってみる.ゲストOSがI/O命令を実行すると,CPUの仮想化支援機能が命令をトラップし,ゲストモードからカーネルモードに移行(VMExit)する. KVMカーネルモジュール内でVMExit要因の…

リアルタイムOSについての参考になる記事

技術の広場 - 高田広章のリアルタイムOS論---目次:ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20060921/248659/?ST=ittrend 技術の広場 - 高田広章のリアルタイムOS論【第2回】(3):ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20050908/2…

PythonでESXi向けVM管理スクリプトを書いてみた(作成中)

#!/usr/bin/python #CMD_DF = "df | fgrep \"datastore1\" | awk -F ' ' '{print $4}'" CMD_DF = "df | fgrep \"ram\" | awk -F ' ' '{print $4}'" import sys import commands while 1: # --- Check free space in datastore1 --- result = commands.getout…

x64アーキテクチャ向けの自作OS

x64アーキテクチャの公式リファレンス •AMD64 Architecture Programmer’s Manual Developer Guides & Manuals AMD http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/Intel(R) 64 and IA-32 Architectures Software Deve…

YouTubeの動画配信に使われている技術・プロトコル

動画の形式:Flash Video(.flv)形式 動画の配信方式:Real Time Messageing Protocol(RTMP) Over HTTP RTMPというプロトコルをHTTPパケットにくるんで配信している。 HTTPヘッダーのContent-Type(MIME-Type)が"video/x-flv"だった。 "x-"のプレフィクスはMIM…

Windowsプログラミングの参考サイト

EternalWindows http://eternalwindows.jp/

Windows:SendInputで指定した"dwExtraInfo"をグローバルフック内で取得する

Windowsで、マウスに対してSendInputをした場合で試した。 SendInput関数のINPUT構造体内のMOUSEINPUT構造体のdwExtraInfoに指定した値を、マウスのグローバルフックのコールバック関数内で取得したいときは、コールバック関数のlParamがMOUSEHOOKSTRUCTEX構…

Windows: DrowIconExで透過が出来ない。。。

下のコードで、マウスカーソルをデスクトップに描画しても、なぜか背景が透過されない。 透過されずに黒い四角の背景が描画されてしまう。 HDC hDesktopDC = GetDC(NULL); HCURSOR hCursor = LoadCursor(NULL,IDC_ARROW); DrawIconEx(hDesktopDC, 10, 10, hC…

Windowsの.libファイルやダイナミックリンクライブラリ(DLL)について

".lib"ファイルには2種類あるらしい.混同しないようにメモ。 一つ目は、静的なリンクに用いられる「静的リンクライブラリ(標準ライブラリ)」。 二つ目は、DLLを作った際の副産物としてできる「インポートライブラリ」。 これは、"暗黙的リンク"に用いられる…

printkの出力先はカーネルのバッファ(=メモリ)

printk処理の(時間的な)オーバーヘッドを知りたくて、調べてみた。 printkの直接の出力先は、"log_buf"というバッファ(=メモリ)。 →カーネルのソース「kernel/printk.c」で定義されている /var/log/messagesのようなファイルへの書き込みは、ユーザプロセス…

Windows8でCreateProcess系の関数

1: 779b3848 @!"ntdll!RtlCreateProcessParametersEx" 2: 77985c74 @!"ntdll!NtCreateProcessEx" 3: 77985c88 @!"ntdll!NtCreateProcess" 4: 779a151c @!"ntdll!RtlpCreateProcessRegistryInfo" 3: 77985c88 @!"ntdll!ZwCreateProcess" 2: 77985c74 @!"ntdll…

Windows:PEヘッダからたどって、DLLのエクスポート関数を列挙する

Windows7の32bitアプリ、Visual Studio2008で動作確認。 #include <stdio.h> #include <windows.h> #define RVAtoVA(type, base, offset) ((type)(PVOID)(((PCHAR)(base))+(offset))) int main() { DWORD dwModuleBaseAddr; PIMAGE_DOS_HEADER pDosHeader; PIMAGE_NT_HEADERS32 p</windows.h></stdio.h>…

Windowsでの関数呼び出し規約

Windowsでの関数の呼び出し規約は int (*func)(int); // -> int (__cdecl *)(int) int (WINAPI *func)(int); // -> int (__stdcall *)(int)[参考] Hello, world の解説 〜 WINAPI とは何か? __stdcall の説明 - Web-DB プログラミング徹底解説 http://keico…

X86のアセンブラを勉強

0から作るOS開発 ブートローダその6 セグメント http://softwaretechnique.web.fc2.com/OS_Development/bootloader6.html

tremaとOpen vSwitchの使い方メモ

インストール後・・・ --- Open vSwitch --- ブリッジを追加する ovs-vsctl add-br br0 ovs-vsctl add-port br0 em1 ovs-vsctl add-port br0 em2 確認 ovs-vsctl list-ports br0 OpenFlowのフローエントリを確認 ovs-ofctl dump-flows br0 OpenFlowコントロ…

sk_buff *skbのデータ長skb->lenとskb->data_lenについて

skb->data_len == 0 の時は、パケットのデータにリニアにアクセスできる。 つまり、skb->data[i] (i=0..skb->len)ですべてのデータを読み出せる。skb->data_len != 0 の時は、パケットのデータがフラグメント化されているので、上記のようにリニアには読み出…

Linuxカーネルでstruct net_deviceの一覧を取得する

struct net init_netがグローバル変数で宣言されているので、これを利用するらしい。 #include <linux/netdevice.h> struct net_device *dev; dev = first_net_device(&init_net); while (dev) { printk(KERN_INFO "found [%s]\n", dev->name); dev = next_net_device(dev); }Ge</linux/netdevice.h>…

tc,iptablesの使い方メモ

# tc qdisc add dev em1 root handle 1: htb default 30# tc class add dev em1 parent 1: classid 1:1 htb rate 6mbit burst 15k# tc class add dev em1 parent 1:1 classid 1:10 htb rate 5mbit burst 15k# tc class add dev em1 parent 1:1 classid 1:20 …

高精度カーネルタイマ hrtimer (hrtimer_nanosleep())のソースを追う

Linuxカーネル3.4.10 hrtimer_nanosleepはここ。 初期化後起動されるdo_nanosleepがnanosleep処理本体。 [kernel/hrtimer.c] 1580 long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, 1581 const enum hrtimer_mode mode, const …

clock_nanosleep()のソースを追う

Linuxカーネル 3.4.10 clock_nanosleepはシステムコールだそうです。[kernel/posix-timers.c] 1035 SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags, 1036 const struct timespec __user *, rqtp, 1037 struct timespec __user …

デバックプリント(DebugPrint)のマクロ

#define PRINTD(fmt, ...) printf(fmt, __VA_ARGS__)職業としてのプログラミング 可変個引数マクロを使う http://proger.blog10.fc2.com/blog-entry-33.html --- 2013/01/10 追記 --- __VA_ARGS__がひとつも無い時にコンパイルエラーになってしまう対策とし…

Linuxカーネル中のtrace_*系関数の定義場所

trace_net_dev_xmitとかtrace_net_dev_queueとか、trace_???系の関数はソースコードをgrepしても定義が見つからない。 と思ったら、include/trace/eventsあたりにマクロで定義されていた。 ftraceで使うみたい。

QEMUでARMエミュレート&実行

arm-linux-gnu-gcc -c -mcpu=cortex-m3 -mthumb start.S arm-linux-gnu-objcopy -O binary start.o start.bin qemu-system-arm -cpu cortex-m3 -kernel start.bin -monitor telnet::4444,server,nowait

Cortex-M3のバイナリの逆アセンブル

Thumb命令です。 arm-linux-gnu-objdump -b binary -m arm -M force-thumb -D start.binELF形式からだと確実っぽい arm-linux-gnu-objdump -d start.o

ARM開発環境

Linux に GNU ARM ツールチェーンをインストールする http://www.ibm.com/developerworks/jp/linux/library/l-arm-toolchain/

スタートアップルーチンからフルスクラッチでHLWを出力する

組込み技術者向け「初めてのC言語」 http://www.ertl.jp/~takayuki/readings/c/index.html

manより"info"の方がたくさん情報を見つけられる

infoだと・・・ info gcc info ls etc...http://www.ertl.jp/~takayuki/readings/c/no04.html

スタートアップルーチン

http://monoist.atmarkit.co.jp/mn/articles/0612/19/news098.html

QEMUモニターの機能メモその1

◎メモリダンプ(命令列変換!) xp/[ダンプ数][形式][サイズ] メモリアドレス xp:コマンド名 ダンプ数:10とか適当に 形式:x=16進,o,d,u,c, "i=アセンブラ命令" サイズ:b(8bit),h(16bit),w(32bit),g(64bit) 例:xp/40xb 0x10000 00010000: 0xd3 0xf0 0x2f 0x…