These pages are written by only Japanese.
|
Namazu for hns による簡易全文検索です。 詳細は 詳細指定/ヘルプをご参照下さい。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||
func.php function get_resolve_uri($cmd='', $page='', $path_reference='rel', $query='', $\fragment='', $location=1) <略> if (! empty($page)) { $ret .= $flag.$page_pref.rawurlencode($page); $ret = preg_replace('/%2F/', '/', $ret); // yoya $flag = '&'; }参考 「Flash/...」のページを辿ると、URL に / がそのまま反映されます。 こんな感じのページにリンクされます。
vi config.m4 前) PHP_NEW_EXTENSION(swfed, swfed.c, $ext_shared) 後) PHP_NEW_EXTENSION(swfed, swfed.c swf_object.c, $ext_shared)(ファイル名の間に , を入れず、空白だけにするのがミソ)
$ phpize $ ./configure $ make色々と PHP extension の(仕組みはまだよく分からないけど) 実装方法がわかってきたので、以下のページにメモ開始。 殆どは Klab 様の教えそのままですが、もう少し充実させる予定。
ワイヤレスヘッドホンもディレイの元になる可能性があるので実はオススメしがたいところ。 HDTVの映像は16.7ミリ秒(1/60秒)ごとに書き換える必要があるのだけど、 それでこれ以上短い時間はこの時間を単位に整列されることになる。 遅延もきっちり同期してて、ちょうどこの時間2回分というのが面白い。 ここ最近のテレビは内部で映像をデジタル処理してるので、必ず遅延があります。 特にシャープと日立、東芝は4フレ以上と酷いのでゲーム用途では地雷扱いです。 逆に三菱、パナソニックは大体1フレームで収まるので優秀…といわれています。逆にテレビ番組を見る分には前半のメーカーの方がよさそうですね。
PHP_NEW_EXTENSION(swfed, swfed.c swf_object.c swf_header.c bitstream.c, $ext_shared)更に、クラス内部データ取得ルーチンを分離 (異常系がいい加減…)
static swf_object_t *get_swf_object(zval *obj TSRMLS_DC) { zval *data, **tmp; swf_object_t *swf; int id, type; data = zend_read_property(Z_OBJCE_P(obj), obj, "swf_object", strlen("swf_object"),1 TSRMLS_CC); zend_hash_find(Z_OBJPROP_P(obj), "swfed", strlen("swfed") + 1, (void **)&tmp); id = Z_LVAL_PP(tmp); swf = zend_list_find(id, &type); return swf; }SWF ファイルの magic の型定義を作って、
typedef struct swf_header_ { unsigned char f_magic[4]; // 'FWS' or 'CWS' + '\0'; <略> }swf_object_input -> swf_header_input の流れと、
$obj = new SWFEditor(); $obj->input("CWS...."); $obj->swfInfo();実行結果
% php yoya_test.php input done magic: CWS SWFEditor->destoryとりあえず、とっかかりが出来ました。
$swfdata = file_get_contents("saitama.swf"); $obj = new SWFEditor(); $obj->input($swfdata); $obj->swfInfo();
magic=FWS version=4 file_length=2704 frame_size=(0, 0)-(240, 240) frame_rate=8.0 frame_count=40
swf_tag_t *swf_tag_create(bitstream_t *bs) { swf_tag_t *tag = calloc(1, sizeof(*tag)); int tag_and_length, length; tag_and_length = bitstream_getbytesLE(bs, 2); tag->tag = tag_and_length >> 6; tag->length = tag_and_length & 0x3f; tag->length_longformat = 0; if (tag->length == 0x3f) { tag->length = bitstream_getbytesLE(bs, 4); tag->length_longformat = 1; } tag->data = calloc(tag->length, 1); bitstream_getstring(bs, tag->data, tag->length); tag->modified = 0; return tag; }実行結果。
% php yoya_test.php *** glibc detected *** php: malloc(): memory corruption: 0x09d202e8 *** ======= Backtrace: ========= /lib/libc.so.6[0x2bd14c]さて、寝よっと…
magic=FWS version=4 file_length=2704 frame_size=(0, 0)-(240, 240) frame_rate=8.0 frame_count=40 tag=9 length=3 tag=1 length=0 <略> tag=26 length=7 tag=1 length=0 tag=0 length=0タグの分解まで出来ちゃった…
$swfdata = file_get_contents("saitama.swf"); $obj = new SWFEditor(); $obj->input($swfdata); echo $obj->output();
% php yoya_test.php > t % fdmp t addr : 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0x00000: 4657 5304 900a 0000 .... .... .... .... FWS順調…
$swfdata = file_get_contents("saitama.swf"); $obj = new SWFEditor(); $obj->input($swfdata); print $obj->output();
% php yoya_test.php > t % md5sum t saitama.swf b4b4698958e961336389dd421b671157 t b4b4698958e961336389dd421b671157 saitama.swfさて…、ようやく本題のデータ編集の実装に入れます。長かった…
#define calloc(n,s) calloc_debug(n,s,__FILE__,__LINE__) #define malloc(s) malloc_debug(s,__FILE__,__LINE__) #define free(p) free_debug(p,__FILE__,__LINE__) #define realloc(p,s) realloc_debug(p,s,__FILE__,__LINE__)これで、free し忘れを一箇所発見。
% php yoya_test.php > /dev/null XXX (/home/yoya/src/php/php-5.1.6/ext/swfed/swf_tag_jpeg.c, 20)
$swfdata = file_get_contents("saitama.swf"); $obj = new SWFEditor(); $obj->input($swfdata); echo $obj->getJpegData(1);
php yoya_test.php > saitama.jpg
flash.swf.tools.SwfPrinter#main()になります。なんか、 swfのリバースエンジニアリング大歓迎っていう感じのツールですね(笑)空気読みまくりな Adobe が大好き。それでは遠慮なく(ry
量で感情揺さぶるのが先か。この辺を中途半端に理解して目立つだけの手抜きに走られても困りますけどね。
予価は各249,800円。うーん。ネタで買うにはキツいお値段…
% php swfdump.php saitama.swf magic=FWS version=4 file_length=2704 frame_size=(0, 0)-(240, 240) frame_rate=8.0 frame_count=40 tag=SetBackgroundColor(9) length=3 tag=ShowFrame(1) length=0 tag=JPEGTables(8) length=0 tag=DefineBitsJPEG(6) length=2133 jpeg_id=1 jpeg_data_size=2131 tag=DefineShape(2) length=51 <略> tag=PlaceObject2(26) length=7 tag=ShowFrame(1) length=0 tag=End(0) length=0jpeg_id(今回は 1) の画像入れ替え実行。
$ php swfreplacejpegdata.php saitama.swf 1 aria.jpg > test.swf