ときどきの雑記帖 RE* (新南口)
Seven
フッケバイン
買った。 ほとんど小泉さんの文目当てで(笑)
Vガン
BS11でVガンダムの放送(ただし「セレクション」)があると聞いたので 調べてみたが
『機動戦士Vガンダム』セレクション | BS11(イレブン)|全番組が無料放送
放送日・各話タイトル
放送回 放送日 話数 タイトル #1 3月31日 第1話 白いモビルスーツ #2 4月7日 第4話 戦いは誰のために #3 4月14日 第17話 帝国の女王 #4 4月21日 第29話 新しいスーツV2 #5 4月28日 第34話 巨大ローラー作戦 #6 5月5日 第41話 父のつくった戦場 #7 5月12日 第50話 憎しみが呼ぶ対決 #8 5月19日 第51話 天使たちの昇天
8本かあ。
_N_GNU_nonoption_argv_flags_
前回の
_<PID>_GNU_nonoption_argv_flags_
この変数は bash(1) 2.0 が glibc と通信するために用いられた。 どの引数がワイルドカードを展開した結果で、 したがってオプションとみなすべきでないかを知らせるものである。 この機能は bash(1) のバージョン 2.01 で削除されたが、glibc にはまだ残っている。
のつづき。
残念ながら古すぎて bminor/bash: Unofficial mirror of bash repository. Updated daily. にはないので、GNUのミラーサイトからダウンロードして調べた。
まず、2.01のCHANGESにこんな記述があった。
This document details the changes between this version, bash-2.01-alpha1, and the previous version, bash-2.0-release.
mm. The special glibc environment variable (NNN_GNU_nonoption_argv_flags_) is no longer placed into the environment of executed commands – users of glibc had too many problems with it.
had too many problems with it
って…😓
これだけではなんなので CWRU/changelogもみると
2.01のものには
execute_cmd.c
don’t put the gnu_argv_flags into the environment any more; it’s proven to be a bad idea
とあり
2.0のものには
variables.c
new function put_gnu_argv_flags_into_env (pid, flags_string) to put Roland’s GNU getopt helper variable into the export_env
とあった。 せっかくファイル名が書いてあったので そのファイルを見てみると こんなコードが見つかった。
variable.c
void
put_gnu_argv_flags_into_env (pid, flags_string)
int pid;
char *flags_string;
{
char *dummy, *pbuf;
int l, fl;
pbuf = itos (pid);
l = strlen (pbuf);
fl = strlen (flags_string);
dummy = xmalloc (l + fl + 30);
dummy[0] = '_';
strcpy (dummy + 1, pbuf);
strcpy (dummy + 1 + l, "_GNU_nonoption_argv_flags_");
dummy[l + 27] = '=';
strcpy (dummy + l + 28, flags_string);
free (pbuf);
export_env = add_or_supercede_exported_var (dummy, 0);
}
そして2.01では変化がなかったが、2.02で
#if 0 /* UNUSED -- it caused too many problems */
void
put_gnu_argv_flags_into_env (pid, flags_string)
int pid;
char *flags_string;
{
と無効にされていた。
execute_cmd.cの方では 2.0で
if (pid == 0)
{
int old_interactive;
#if !defined (ARG_MAX) || ARG_MAX >= 10240
if (posixly_correct == 0)
put_gnu_argv_flags_into_env ((int)getpid (), glob_argv_flags);
#endif
/* Cancel traps, in trap.c. */
restore_original_signals ();
というものが2.01で
if (pid == 0)
{
int old_interactive;
#if 0
/* This has been disabled for the time being. */
#if !defined (ARG_MAX) || ARG_MAX >= 10240
if (posixly_correct == 0)
put_gnu_argv_flags_into_env ((int)getpid (), glob_argv_flags);
#endif
#endif
/* Cancel traps, in trap.c. */
restore_original_signals ();
のようになっていた。 これだと2.01で問題の機能は無効にされているということで 間違いないっすね。
この機能は bash(1) のバージョン 2.01 で削除されたが、glibc にはまだ残っている。
については、さすがに最新のglibcにはないっぽいけど いつごろどうなったのかを調べる余力はナッシング。
We Need Legos for Code
We Need Legos for Code | Hacker News
The dream of “Legos for code” has been around practically as long as code itself. It’s such a ubiquitous meme that back in the Nineties Douglas Coupland wrote a popular novel about it, Microserfs (https://www.goodreads.com/en/book/show/2748). History is littered with the carcasses of startups that took up the challenge. That same siren song has now called up a new generation of “no code” platforms. Time will tell if any succeed.
Isn’t that what Brad Cox tried to do with Objective C around 1985.
https://breadchris.com/pages/we-need-legos-for-code/
FORTRAN Compiler on IBM 704
引き続きARITHMETIC STAEMENTのところを眺めていたのだけど
MS320 STZ CHSAVE CLEAR CELL FOR OP. 4F13660
MS321 *** MS330,0 TXH ON LEFT, TXL ON RIGHT OF = SIGN. 4F13661
TSX SS000X,4 GO PROCESS SUBSCRIPT COMBINATION 4F13662
TSX C0190,4 GET NEXT CHAR. 4F13663
SUB EQUAL TEST FOR EQUAL SIGN. 4F13664
TNZ MSERR= NO, ERROR. 4F13665
や
MS330 TSX DIM1SR,4 SEARCH FOR THIS NAME IN THE DIM1, DIM2, 4F13687
TRA MS331 AND DIM3 TABLES. IF IT IS FOUND IN ONE OF 4F13688
TRA MS333 THESE TABLES IT IS A SUBSCRIPTED VARIABLE 4F13689
MS331 TSX DIM2SR,4 OF THAT NUMBER OF DIMENSIONS, IF IT IS NOT 4F13690
TRA MS332 FOUND IN ANY DIMENSION TABLE THEN IT IS 4F13691
TRA MS333 ASSUMED TO BE THE NAME OF A FORTRAN II 4F13692
MS332 TSX DIM3SR,4 SUBROUTINE OR FUNCTION COMPILED SEPARATELY.4F13693
TRA MS334 X 4F13694
MS333 TSX SS000X,4 GO PROCESS SUBSCRIPT COMBINATIONS 4F13695
TRA LATXH GO PERFORM LEVEL ANALYSIS. 4F13696
で呼び出しているSS000X
がさらに呼び出している
REM PROGRAM TO SIMPLIFY THE TREATMENT OF RELATIVE ADDRESSES IN 4F13986
REM SECTION ONE THRU THE USE OF THE RA000 SUBROUTINE BY STATE B. 4F13987
SS000X SXD SSIR4,4 SAVE CALLING TAG. 4F13988
TSX SS000,4 GO TO SUBSCRIPT SCAN AND ANALYSIS ROUTINE. 4F13989
TSX RA000,4 GO TO RELATIVE ADDRESS COMPUTATION ROUTINE.4F13990
CAL GTAG 4F13991
ANA MASK1 4F13992
SLW E+11 4F13993
TSX SIG1IX,4 GO ENTER THIS RELATIVE ADDRESS IN SIGMA1. 4F13994
ALS 15 POSITION SIGMA TAG. 4F13995
ORS E ADD SIGMA TAG TO I-TAU TAGS IN E. 4F13996
LXD SSIR4,4 RELOAD CALLING TAG. 4F13997
TRA 1,4 RETURN TO CALLER +1. 4F13998
SS000
が結構な長さであることに気がつく。
REM SS000,4/ CALLS=C0190,DIAG,SR6DC1,DIM,SR,DRTABS,TET00,TESTFX. 4F11033
REM CALLERS=ARITH,LPR,C0200. 4F11034
REM SS000 SCANS SUBSCRIPT COMBINATIONS AND MAKES TABLE ENTRIES. 4F11035
SS000 SXD SXR2,2 SAVE C(XR2), 4F11036
SXD SXR1,1 SAVE C(XR1), 4F11037
SXD SXR4,4 SAVE C(XR4), AND 4F11038
STZ DIMCTR SET DIMCTR = 0. 4F11039
始まりの部分がこれで
NOTAG CAL FNIND POSITION SIGMA1 TAG, AND 4F11296
ORS E PLACE SIGMA1 TAG IN TAGE WORD. 4F11297
SAEXIT LXD SXR1,1 RESTORE THE C(XR1) 4F11298
LXD SXR2,2 RESTORE THE C(XR2) 4F11299
LXD SXR4,4 RESTORE THE C(XR4) 4F11300
TRA 1,4 * EXIT TO MAIN ROUTINE. 4F11301
REM END OF PROGRAM SS000. 4F11302
終端がこう。
11302 - 11033
で二百数十行くらいすか。
ちなみにSS000X
からもう一つ呼び出しているRA000
はそれほどでもなかった。
RA000 COMPUTES RELATIVE ADDRESS.
REM RA000,4/ CALLERS=LPR,ARITH. 4F10909
REM RA000 COMPUTES RELATIVE ADDRESS. 4F10910
RA000 SXD RAXR4,4 SAVE THE C(XR4) FOR RETURN. 4F10911
STZ EPS CLEAR EPSILON (WORKING STORAGE). 4F10912
CLA DIMSAV EXAMINE THE 4F10913
ED2 PAX E+4,4 DIMENSION COUNT, AND 4F10914
TXL ED1,4,2 IF 3 DIMENSION, 4F10915
ADD L(1) INCREASE IT 1. 4F10916
ED1 ADM ED2 THEN SET 4F10917
STA ED3 ED3 ADDRESS TO 4F10918
ED3 CLA **,4 EXAMINE SUCCESSIVE 4F10919
LDQ D1 SUBSCRIPT 4F10920
TZE ED4 VARIABLES, AND 4F10921
STQ EPS ACCORDINGLY SET 4F10922
LDQ L(0) EPSILON AND 4F10923
ED4 STQ EPS,4 EPSILON SUB I 4F10924
TIX ED3,4,1 TO 1 OR TO 0. WHEN DONE, 4F10925
CLA D1 IF 1 DIMENSION, PICKUP DECREMENT 1,4F10926
LXA DIMSAV,4 AND GO SUBTRACT ADDEND 1. 4F10927
TXL 1D1,4,1 IF 2 OR 3 DIMENSION, THEN 4F10928
LDQ E+11 PICKUP ADDENDS 1 AND 2, 4F10929
STZ E+11 CLEAR E+11, AND 4F10930
SLQ E+11 RESTORE ADDEND 1 TO E+11. 4F10931
LGL 18 ADJUST AND PLACE 4F10932
STQ N2 ADDEND 2 IN N2. 4F10933
LDQ E+6 AND, IF 2 DIMENSION 4F10934
CLA EPS-1 PICKUP EPSILON SUB 1, 4F10935
TXL 2D1,4,2 AND GO SUBTRACT ADDEND 2. 4F10936
SUB E+12 IF 3 DIMENSION, SET GTAG 4F10937
STO GTAG TO EPSILON SUB 1 - ADDEND 3. 4F10938
LDQ E+8 PICKUP DIMENSIONS 1 AND 2, 4F10939
STZ E+8 CLEAR E+8, AND 4F10940
SLQ E+8 RESTORE DIMENSION 1 TQ E+8. 4F10941
LGL 18 ADJUST, AND MULTIPLY 4F10942
MPY GTAG DIMENSION 2 TIMES GTAG. 4F10943
ALS 17 THEN ADD 4F10944
ADD EPS-2 EPSILON SUB 2 4F10045
LDQ E+8 TO THE PRODUCT, AND 4F10946
2D1 SUB N2 SUBTRACT ADDEND 2. 4F10047
STO GTAG MULTIPLY 4F10048
MPY GTAG THE RESULT 4F10049
ALS 17 TIMES 4F10950
ADD EPS,4 DIMENSION 1, AND,ADD,IN EPSILON 4F10951
ADD EPS SUB 1 AND EPSILON. 4F10952
1D1 SUB E+11 SUBTRACT ADDEND 1, 4F10953
STO GTAG AND PLACE THE RESULT 4F10954
CAL E IN TNE DECREMENT OF GTAG, 4F10955
ARS 24 WITH I-TAUTAG 4F10956
STA GTAG IN THE ADDRESS. 4F10957
LXD RAXR4,4 RESTORE THE C(XR4), AND 4F10958
TRA 1,4 * EXIT TO CALLER. 4F10959
REM END OF PROGRAM RA000. 4F10960
とは言え何をどうしているのかを把握するのはこれもタイヘンそうではある。
Hello, world
リバースエンジニアリングが極端に難しい Linux用 "Hello, World!"。x86アセンブリで書かれているが、同じ命令を2度使っていないので、ダンプしても意味不明に見える。https://t.co/Bo3Eu1bBag
— 新山祐介 (Yusuke Shinyama) (@mootastic) March 18, 2023
というのでどんなものかと phoreverpheebs/gibberish: Hello, World! written in seemingly “gibberish” x86 assembly using obfuscation on the assembly and machine code -level に見に行ってみると
gibberish/gibberish.asm at main · phoreverpheebs/gibberish · GitHub
section .text
global _start
clflush [0xe6819648]
dd _start+8
jmp $+1
salc
_start:
call _start-11
lmsw [eax+0x0c87c18f]
and al, 0x80
loopz $-0xf ; AND ecx with 0xef to unset ecx[4]
jp $+3
test dword [eax+0xeb1d2404], 0x01efbe15 ; add onto return address and jump to print
rcl dword [eax+0x80900e04], 0xc3
db 0x0b, 0xf6 ; or esi, esi | we have to write it explicitly
jecxz $+0x2e
jno $+0x7b
int1
nop dword [eax]
jnp $+0x27
以下略
なるほどわからん。
OpenJDKに昨年導入されたモダンなGC: "ZGC" 内部構造の解説。ZGCは 25klocもあり、いきなりコードを読むのはかなり大変。この論文では並列GCの解析をするのに有用なSPINモデルも解説する。https://t.co/9oLMY5VmNb
— 新山祐介 (Yusuke Shinyama) (@mootastic) March 18, 2023
- Deep Dive into ZGC: A Modern Garbage Collector in OpenJDK (2022) [pdf] | Hacker News
- https://dl.acm.org/doi/pdf/10.1145/3538532
ZGCではもちろんないけれども、その昔 ガベコレ本の読書会やってたよなあ。 と↓のツイートと絡めて思い出したり。
TAPL
TAPL絶版マジ!? とびっくりして軽く検索かけたらどうやらマジっぽくて諸行無常を感じてる
— ゆみや (mstdn.maud.ioにもいます) (@stepney141) March 13, 2023
(Amazonに新刊在庫がなく高騰した中古品のみ・hontoで取り扱い不可になってる)
そんなことに、と思っていたら 解説(?)のツイートがあった。
TAPL和訳『型システム入門』の紙版は出版社間の契約期間のご都合により「絶版」ではなく「重版止め」(今後の可能性がなくはない)で「まだ僅かに在庫もございますので、弊社、または書店に直接注文いただければ、紙版も購入可能です」だそうです.電子版は契約により販売継続します.取り急ぎm(_ _)m https://t.co/b5a8lyhVB7
— S (ツイートはスレッド全体をご確認ください) (@esumii) March 17, 2023
(「出版社間の契約」の内容は私は知らないのですが,日本の出版社と監訳者の契約は確かに2013年3月付なのでちょうど10年)
— S (ツイートはスレッド全体をご確認ください) (@esumii) March 17, 2023
確かに翻訳本は期間の取り決めがあったようなと思いつつも 電子書籍(PDF)ではまだ買えるというのが良くわからないけど、 「放送」と「配信」での音楽と同じような感じなのかも? (よくわかってない)
(監)訳者も(おそらく)出版社も,実際の労力や経費に対して利益が出るような商品ではないのでご容赦ください…
— S (ツイートはスレッド全体をご確認ください) (@esumii) March 17, 2023
これはなあ…