Arch linux 時間のズレを直す編

Arch linux上のchromeツイッターを開くとツイート時刻が9時間ずれていたので、おそらく使われている時刻が協定世界時UTC)になっているのでこれをどうにかする。

かの友人が解決のヒントとなるリンクを貼ってくれたのでそれを見るとたしかに記事に書かれている通りのことが自分のPCで起こっていたのでどうにかできそう。

blog.livewing.net

Windows とのデュアルブートを考えている場合は時刻系に注意してください。 Windows ではデフォルトでハードウェアクロックにローカル時刻を設定する クソ 仕様であり、その他の OS では UTC (協定世界時) の時刻を設定します。 Windowsレジストリを設定し、ハードウェアクロックが UTC を設定するようにすることをおすすめします。設定せずそのまま放置してデュアルブートすると時刻が 9 時間ずれます (日本の場合) 。

 

まさにこの通りだったから、Arch側をWindowsのために合わせてやるというのは癪だったのでおとなしく記事の通りWindowsの設定をいじることに

 

hattomo.github.io

上のページにあるコマンド

reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f

を管理者権限で開いたコマンドプロンプトで叩くとあら不思議、Windowsの設定時間が9時間前になってるじゃないですか。Twitterを見ると一番上に来るツイートも9時間前との表示。それはそれで困るのでコントロールパネルもしくは設定からどうにかして時刻の同期をすると、ちゃんと右下の時刻は日本時間ぴったりを指しました。

www.javadrive.jp

solution.fielding.co.jp

Twitterを開いて適当にツイートしてもちゃんと数秒前の表示になりました。

ということでArch Linuxに戻ってきまして、時刻の表示とTwitterを確認するとちゃんと日本標準時に設定されてまして、これにて一見落着。

少なくともここに書いたことをガチャガチャやったら解決するんじゃないでしょうか。

記録(2021/6/30)

12:00起床

7/1 3:00就寝

 

 朝(?)起きてとりあえず最初にしなければならないのは時間的に学食に向かうことだったのでそうした。チキン南蛮と白米Lと午後の紅茶。寝起きに口に含むにしては少々多すぎた。ただチキンは美味い。けどちょっと味が濃い。私はチキンだけでも白米さえあれば食っていけるので、味が濃いと感じるのも無理はないのではないかな。

 本日はアゴろうにも飯塚に住む親戚が実家から送られてきたみかんジュース1L3本を受け取りに来るため断念。というかそもそもアゴラに籠もる気力がないと言うか、家で作業したい気分だった。

 で、帰宅した。今日からarcaeaのTANO*Cコラボだったのでそちらでできることを簡単に済ませ、作業に入る。まず物理の演習と宿題を片付け、計算機システムの授業動画とICTの授業動画の続きを見てレポートなどなどをすすめる。

 丁度いい時間になったので、再び食堂へ。と思ったら大学構内で毛を刈った後の羊のような友人と遭遇。食事に付き合ってもらうことに。何を食ったかは忘れた。確かにあの時点で眠かったと言われたら十二分に納得できる。こぼしたジュースに対する対抗策がアルコールをかけるという事になってるあたり。彼が担当上回の候補になっているということを聞いた。ここで私には自分も認められたいという大変不順な形でゲーム制作への意欲が湧いた。

 discordでまず、unityの学習期限を設けることに。モチベーションがある時点である程度自分を束縛しておこうと思ったわけだ。辞めるわけにはいかないし。

 

 たしかに、今の上回生のように活発に動ける1年生というのがなかなか見当たらないような気もしなくはない。まぁC3と自分が関わっていないだけで見えていないだけかもしれんが。C3運営の将来を危ぶまれるのもわかる。まぁただ、私個人は期限を設けて何かを作るということはしたくない。あとで重くのしかかってしんどくなるのが目に見えるからだ。どうせ将来そうすることになる?知らんな。大学は自分の興味をふんだんにふるえる場所だと思っているから、何かを計画性を持ってやるということは極力裂けたい。そんなの課題だけで十分だ。というわけでサークル活動とは一旦距離を置くべきなのかもしれないと今少々感じたところである。自由に自分の興味に従って行動できるという点では確かに大学は人生の夏休みなのかもしれないなぁと思った。

 

今日はvalorantも開かず、Twitterをダラダラと眺めながら暴れていたらいい感じにTLが温まっていたのでそのままスペースを開き、なんでもない会話をして就寝。

 

以上

記録(2021/6/29)

・起床...10:00

 英語のZOOM授業に出席。12:00に終わるはずが先生が時計を見ていなかった(?)ため、少々オーバー。(やめた)バイトの研修でたまたま見かけた人と授業最後のブレイクアウトルームで一緒になりバイトを辞めた云々の話をする。どうやらその人も少々悩んでいるようだった。

 そのまま食堂へ行きキムラと昼飯を食う。ほうれん草の胡麻和えと豚塩カルビ丼。そのままアゴる。英語の授業中に電話がかかってきており、その件を直接生協へ聞きに行くと、どうやら超感覚英語の返金の話で口座番号を間違っていたときに手数料を取られていたらしく、ちゃんと返金するには手数料が二倍になってしまうという話だった。だいたい1000円くらい。なんて振り込みできずエラーを返しているにも関わらず手数料が取られるのか、謎である。

 アゴラでこの日の英語の課題を済ませ、力学の講義動画を視聴、ICTを途中までやった。3時のおやつにバナナミルクとじゃがりこL。プログラミングリテラシー編をやっている途中にクロセが来る。夕飯を食う(クロセは朝食)。しかし、ミールカードがない。どうやらおやつを買ったときに忘れたようだ、生協の人が渡してくれた。昼にも生協からかかってきた電話はそういうことだったのかと納得。白米M、白身魚フライチリソース、ほうれん草。

 交響に向かう。ちょっと遅れて。いつもどおり19:00くらいまでは基礎練、そっから曲をさらう。なかなか曲をさらうのが進まない。さらった部分も正直ふけるとは言えない。昨日から楽器にすごく息を入れるようになったけど、うるさくないだろうか。そもそも管楽器と弦楽器が同じ空間で練習すること事態に無理がある気がする。先に来ていたトロンボーンの人がいたが、延々と独り言のようにフレーズを口ずさんだり、ぼそぼそっとなにか言ったりと、少々怖かったというのが正直な感想。だって初めて見た人だったもの。結局声をかけられなかった。ついでに最後まで同学年の人らしきにも声をかけられず、終わった後も一人でトボトボ帰った。後ろから女声が聞こえたが、「グループに居る人数の割に練習の人が少ない」という内容だろうか、そもそも交響の人科もわからんが、たしかにそうかもしれんなと思った。確かに40人もいない気がする。コロナ感染対策として水曜日と金曜日の練習を遠慮するように言われた。その曜日のほうが人数が少ないから感染リスクも寧ろ少ない。なのにその日は練習しないように、コロナ対策だよって言われても意味がわからない。部長さんも学校に言われたんだろうとは思う。

 学校の対応は外見だけを気にして無駄な感染対策で学生の活動の場を不用意に狭めていると思う。アゴラとか特にそうだった。ほんとに感染対策したいなら四人席無くせよって思った。座るなって書いてもどうせ座るやつなんて居る。というか自分も座ってた(ダメじゃん)。同様にこの件も、練習日数減らして、学生の活動を制限することで感染対策しているように見せたいだけではないかと、自分は思うのである。

 夜は疲れ果てぼーっとyoutubeを見て、その間に風呂をため、風呂の前に洗濯物を干して、風呂入って、valorantのカスタムマッチを2回ほど、golf itを2回ほどしてだらだらと過ごして今に至る。

 

ダラダラと文を書き出すくらいしか記録の方法がないと云うか、他の方法がめんどいだけだけど。気が向いたらまた日記書きたい。できたら毎日かけたら良いなと思うけど。

ノートンを叩いて砕く話の続き

 windowsC++コンパイラ(g++)を使っています。

f:id:y_saionji:20210511170227p:plain

 今回はノートンは関係ないですし、何も叩いて砕きません。

 ポインタ遊び第二弾です。

 

    char hoge[5] = {1,0,0,0,1};

 こんな感じの配列を用意しました。で、何がしたいかというと、char(1バイト変数型)で定義されたはずのこの配列を先頭から順に4バイト変数型であるint型(あくまで私の環境では4バイト)で読み込んでやろうという話です。

(なぜ4バイトのintで読むのに配列の長さを5にしたかというのはまた後の話。今はhoge[4]は無いものだと思って大丈夫です。)

 

どうやって?

→もちろんポインタで

 

まずint型用のポインタを用意します。

    int *hogege_p;

(補足)なぜhoge_pではなくhogege_pという名前にしたかというと、やはり型が違うためhogeとは明確に区別したかっただけです。もしかしたらこの先、配列hogeの先頭を指すポインタが必要になるかもしれませんからね、その時のためにhoge_pという名前はとっておきます(結局使いませんでしたけど)。(hogege_pじゃなくて他のもっといい名前あっただろ.........)

 

で、あとは分かりますね。このhogege_pに配列hogeの先頭のアドレスを代入します。

    hogege_p = (int*)hoge;

"hoge"はhoge[0]を指す「char型を指すポインタ型」であるので、int*型への型キャストが必要になります。

 

全体のコードは次の通り。

#include <stdio.h>

int main(){
    char hoge[5] = {1,0,0,0,1};
    int *hogege_p;
    hogege_p = (int*)hoge;

    printf("%x\n"hogege_p);
    printf("%d", *hogege_p);

    return 0;
}

出力は

61fe13
1

となりました。

 

あと、対照実験とは言えないですけど、似たようなことをしました。

まぁ、hogeの初期化の内容を変えただけです。

    char hoge[5] = {0,0,0,1,1};

出力は次のようになりました。

61fe13
16777216

 

 

これで何がわかるかというと、int型は若いアドレス(?)を低い桁に持ってきているということです。自分がその辺の知識が無いのが悪いんですが、あくまで私の環境ではこうだというだけであることに注意してください。

例えば、

  1 2 3 4 5 6 7 8  
0x600000                 hoge[0]
0x600001                 hoge[1]
0x600002                 hoge[2]
0x600003                 hoge[3]

 

こんなふうにアドレスとビットが並んでいて、&piyo == 0x600000であるようなint型変数piyoがあったとするなら、0x600000の8から0x600003の1という方向にビットを、2^0, 2^1, 2^2, ... 2^31という順番で読んでいくわけですね。(同一アドレス内のビットの方向までは知りませんが、すくなくともアドレスの方向はこれで合ってるはずです。)

 

実際のアドレスは違いますが、要は

    char hoge[5] = {1,0,0,0,1};

の場合は上の表の0x600000の8のビットが1で他すべてが0だったため、hogege_pの指す値が1になって、

    char hoge[5] = {0,0,0,1,1};

の場合は上の表の0x600003の8のビットが1で他がすべて0だったため、hogege_pの指す値が2^24 = 16777216になった、ということですね。

 

先に「char(1バイト変数型)で定義されたはずのこの配列を先頭から順に4バイト変数型であるint型(あくまで私の環境では4バイト)で読み込」みたい、と述べましたが、実は真の目的は違います。

本当は、配列hogeを先頭からじゃなくて2番目や3番目から読んでメチャクチャな数字を出したかっただけです。

なのでアドレスを1バイトずらす必要があります。hogege_pにアドレスを代入するところで、こうします。

    hogege_p = (int*)(hoge + 1);

"hoge"は正しくはhoge[0]を指すポインタですので、(hoge + 1)はhoge[0]のアドレスの次のアドレス、つまりhoge[1]を指すわけです。

 

 

こうして晴れて、真の目的は達成されるわけです。

#include <stdio.h>

int main(){
    char hoge[5] = {1,0,0,0,1};
    int *hogege_p;

    hogege_p = (int*)hoge;
    printf("%x\n"hogege_p);
    printf("%d\n\n", *hogege_p);

    hogege_p = (int*)(hoge + 1);
    printf("%x\n"hogege_p);
    printf("%d", *hogege_p);

    return 0;
}

出力は

61fe13
1

61fe14
16777216

となりました。メチャクチャな数字を出したいと言いましたが、ここでは理解してもらうために、さっき表で説明した内容で理解できる数値を出力するようにしました。

 

なにか疑問や修正すべきことなど何でも良いので、あればTwitterの西園寺やきしゃも(このブログのアイコンと同じアイコンのアカウント)まで

 

最終話

 

 

ノートンセキュリティを叩いて砕く(砕くな)

 めっちゃ大げさに書いてみたけどそれほどのことでもない。

 ちょっと具体的に言うと、いきなりポンとアドレスを指定してデータを参照しようとするとノートンに弾かれるけど、連続して参照しまくっていけばノートンに弾かれずデータの中身を見れるという話。

 

 ポインタに1を足すと、そのポインタの指すアドレスに1がたされるのではなく、ポインタの型のサイズだけアドレスが加算されることに注意してほしい。

例えば、

long x = 0;
longx_p;
x_p = &x;

などとして、x_p = 0x600000だったとする。

このとき、*(x_p + 1)が指すのは0x600001ではなく、long型が4バイトのデータ型であることから0x600004となるということ。

 

 まずはじめに、ポインタの復習をした私は、変数を定義していない領域の数値を参照できるのかと思い、次のプログラムを作った。

#include <stdio.h>

int main(){
    long x;
    longx_p;
    x_p = &x;
    printf("%d", *(x_p + 1));
    return 0;
}

 

出力は

6422036

となった。つまり、生成した変数の次のアドレスのデータを読むことができたわけだ。

 

 

楽しくなってきた。

 

 

次のプログラムはこれ

#include <stdio.h>

int main(){
    long xc = 0;
    longx_p;
    x_p = &x;
    while(1){
        printf("%d\n", *(x_p + c));
        c++;         //ここC++言語のタイトル回収みたいで興奮する
    }
    return 0;
}

出力させると無数に0が出てきたり、わけのわからん数字がいっぱい出てくるなどした。

(゚∀゚)キタコレ!!

盛り上がって来たぞおおおおおおおおおおおぉぉぉぉぉ!!!!!!!!

 

 

 

.

..

...

....

.....

と思いきや、途中でノートンに止められた。「データプロテクタはout_of_range.exeの複数の疑わしい処理を遮断しました」とかなんとか。

じゃあどこまで読めるのか。アドレスを一緒に表示させるようにした。

あと、4バイトずつ進むと時間がかかるので、変数をlong long型にして8バイトずつアドレスが下るようにした。(ここでは諸事情により、とりあえずアドレスを下ることにした。)

#include <stdio.h>
#include <iostream>

int main(){
    long long xc = 0;
    long longx_p;
    x_p = &x;
    while(1){
        std::cout << *(x_p + c<< "    " << (x_p + c<< std::endl;
        c--;
    }
    return 0;
}

なんどか試したが、0x424000より下のアドレスはノートンにブロックされてしまうという結果に終わった。

 

とまぁここまでやってきたが、何が言いたいかというと、直接アドレスを指定してデータを参照しようとするとノートン様に怒られてしまうが、連続してどんどんアクセスしまくる場合はノートン様はなにも言わないということ。つまり、目的のアドレス(他のプログラムで使っているかもしれない)を勝手に参照できてしまう(書き込みはおそらく不可能)。

 

ノートンは一発パンチをかますよりも、空条承太郎スタープラチナのようにラッシュで打ち破ることが可能。

その3

そうだ、ここに自分が遊びでつくったC++のプログラムでも載せていこうか。

作って忘れ去られる前の供養ってことで。

ソースも基本うpする。

 

って、プログラムはどうやってうpするんだ?

ドライブにでも入れて、そこのリンクを張るとか?

その2

情報系のことにおいて、男女では能力に差はないと多くの記事が言っているけど、結局問題は価値観であって、男女で価値観が違うから男女の人数差が発生するわけなのだわ。

この人数差を何とかしたいと思うのであれば、この価値観の差がどこから発生するものなのかを知らなければならない。

もし、生物学的というか脳科学的な原因があるならばそれは解決が難しい問題となるから、とりあえずここでは社会的な原因について考える。

で、社会的な原因によって価値観の差が出てくるとしたら、それは最速で幼稚園保育園程度のおもちゃに出てくると思う。ロボットとか人形とか。

 

とまぁ、なんとなく考えてみたけど、どうせ誰かが研究してるでしょうよ、、、

勉強すべし、と