世界創造秘話ではないです!

この記事での神というのは、とても高度な存在のことを指しています。実際の神とは一切関係ありません。

 

あるところに神がいた。神は言った。

「世界よ、滅びろ。」

世界は滅びた。アガサ・クリスティだけが生き残った。ので、アガサ・クリスティが神になった。

神は言った。

「世界よ、滅びろ。」

滅びる世界がなかったので困った。なのでぼくが神になった。

ぼくは言った。

「世界、でかすぎ。」

世界はでかかった。思ってたより2平方メートルぐらいでかかった。最早誤差の範囲ではない。そこでぼくは言った。

「2平方メートル、でかすぎ。」

実際、2平方メートルはでかかった。なので、

 

ここで冷静になったぼく「何?この文章 恥ずかしすぎるでしょ さようなら 」

最強のお菓子 ハッピーターンについて

みなさん、みなさんは"自分だけの最強のお菓子"はありますか?ぼくはあります。

 

............え?

 

飴?何言ってんですか?...個包装チョコ?は?いやいや。誰が言ったんですかそんなこと。おいおい、お前だろ笑そうだったわ笑う笑ごめんね笑いいよいいよ笑😘

 

時代は...

 

 

 

 

 

 

 

 

 

 

ハッピーターン(個包装)でしょ 笑😅

 

ちなみに、ここまで前座です。ガハハハハハ

 

ハッピーターンは すげぇ

みなさん、ハッピーターンってご存知ですか?そうですか。

(本来ならここに前座2が入るが、永久に(未来永劫(悪魔の証明ではない))存在しないものとする。)

 

ということで、ハッピーターンの素晴らしさについて説明させていただきます。

おっと、その前に笑

ハッピーターンの評価を行いいま、今すね。今。

評価の仕方は先駆者様のこちらの記事(素晴らしい、最高、どんでん返し、ちなみに宣伝です、

ちなみに宣伝です、

)を参考にさせていただきます。いいよ!!!

 

ueki.hatenablog.jp

 

要するに、おいしさ、汚れにくさ、コスパをそえr(誤字っちゃったけど直さなくてもいいよね)(っていうために誤字ったのを直したけどもう一回わざと誤字りました 俺は悪い人間です)(ここでかっこ入れて区切っちゃうと文章わけわかんなくなるな)(ごめん)ぞれ5段階評価しししっします。math。おっと、数学。

 

評価の結果は〜〜〜〜.........

ばん!おっと、ドラムロール(ない)。

 

・おいしさ:5

・汚れにくさ:4

コスパ:5

・合計点:14

 

やばすぎ〜〜〜〜〜?!

ちなみに、汚れにくさは個包装のハッピーターンは一口で食べれることを前提にしています。検証はしていないです。検証は土手で。で、

忘れていたコメントですが、

 

コメント:うまい、ハッピー、個包装なので汚れにくい、コゥゥウッウッスパ高い、ですね!!!特にハッピーなのがいい。よー

 

ということで!

いかがでしたか?最強のお菓子はハッピーターンです!しょっぱいし、とてもいいですね! いつか最強の飲み物についても書きたいです。どんすけ〜

 

ありがとうと言います

この記事、友達がこの記事を読んでくれて、しかもハッピーターンって最強じゃない?と言ってくれたからできました。本当にありがとうございます、ございます、ございまする、友達、お友達様!!!!!!!

 

ところで

みなさん、ご自分でハッピーターンを購入されたことはありますか?ぼくはないです。上記の友達様も自分で買ったことがない(意訳)と言っていたので、多分みなさんもないと思います。

ハッピーターンをご自分で購入された方、いたらすごいなと思います。本当に。

論理演算と基本論理回路について

う え き ぷ に き あ く ん 笑 Advent Calendar 2021 - Adventar 24日目です

 

コンピュータの回路には、基本論理回路というものが非常に多く含まれています。


そんな基本論理回路を理解することは、コンピュータサイエンスマスターへの一歩として必須でしょう。多分(たぶん)。(あと論理演算も)

 

あの

ちょっとごめんなさい。や、めちゃくちゃごめんなさい。時間が足りなくて、基本論理回路の記号(それ以外の色々も)を用意できませんでした...アドカレ終わったら追加しておきます...

 

論理演算

論理演算とは、命題の真偽を数値で表して演算を行うことです(?)。登場する数値は0か1のみであり、普通に(算数と同じような)演算をして1を超える数値は全て1になります(伝われ(は?))

例えば、後述するAND回路は、入力をA, B、出力をCとすると、出力Cは以下の論理演算の式で表すことができます。

 

C = A•B

 

また、このような論理演算の式のことを論理式といいます。大事、大事!です!

 

真理値表

論理回路におけるの真理値表とは、論理回路に対する入力と出力の対応の表です。図の内、1は電気が流れている状態、0は電気が流れていない状態のことを表します。

 

AND

真理値表は以下のようになります。

A, Bが入力で、Cが出力になります。

 

f:id:Ll_e_ki:20211224231316p:plain

AND回路の真理値表

 

真理値表の通り、あるいは名前の通り、入力がどちらも1のときのみ出力も1になります。

論理式は

C = A•B

となります。算数っぽいですね!

 

OR

真理値表は以下の通りです。

ANDと同様にA, Bが入力、Cが出力になります。

 

f:id:Ll_e_ki:20211224232909p:plain

OR回路の真理値表

 

真理値表の通り、あるいは(ry、入力のどちらかが1のときのみ出力が1になります。

論理式は

C = A+B

となります。この式は論理演算の式であるため、A = B = 1でもCは1にはならないことに注意していただけると!

 

NOT回路

真理値表は以下の通りです。

Aが入力、Bが出力です。もしかして出力はFとかに固定しておいた方がよかったのかな...アドカレ終わったらこっちも直すかもしれません(ごめんなさい、うう...)

 

f:id:Ll_e_ki:20211224233153p:plain

NOT回路の真理値表

 

NOT回路は、入力とは逆の状態を出力します。入力が0なら1を、1なら0を出力します。

論理式は

B = Ā

となります。ここで、ĀはAバーと読みます。ええばあです、えーばー。

バーが上につくと、値を反転させるという意味になります。すなわち、NOT回路そのものですね!ドヤァ...(は?)

 

ごめんなさいいかがでしたか?

ごめんなさい。全然イブに相応しくない記事ですね。いや、逆にイブだからこそ、執筆の時間が取れなくてこんな記事になったと考えると、イブに相応しいのではないでしょうか。いいえ。本当は書く内容が思いつかなかっただけです。ごめんなさい。いかがでしたか?明日はpwnについて書こうと息巻いておりましたので明日の執筆担当(うえきさん)が、頑張って欲しいものですよ!!!ー!!!!

 

 

終わり 良いクリスマスをでした___

って何?うんたかは?調べてみました!いかがでしたか?×3

う え き ぷ に き あ く ん 笑 Advent Calendar 2021 - Adventar 23日目です

 

みなさん!は、「なんか曖昧な使われ方してるな〜〜〜〜〜〜っ」っと、感じる言葉はありますか?ぼくはある!!!のぜーっ

 

世界の終わりだ

貴重な記事の枠をこんな内容が薄い記事で潰してはいけない。

 

本記事について

本記事では、クラウド, AI, ビッグデータに絞り、それぞれの意味について解説というか調べるついでに記事にしてネタ切れをごまかそうというかそういうあれです。決してそういうあれではアロエま1000YO!!!⭐️

 

クラウド

って何?Webアプリとの違いは?調べてみました!

 

そもそもクラウドとは、サーバー上のシステムに接続してサービスなどを利用する仕組みのことのようです!

 

 

はァ??

 

じゃあWebアプリとはどう違うんだよ。調べてみました!

 

クラウドとWebアプリの違いは、WebアプリはWebブラウザ上でサーバー上のシステムに接続して利用できるサービスであるのに対し、クラウドWebブラウザ上という制約がないそうです。

 

あっえっ、そうなんだ、ほえー(知らなかった)

 

いかがでしたか?クラウド、便利っぽいですね!!!

 

AI

って何?人間との違いは?調べてみました!

 

そもそもAIとは、人工知能のことで、人間の知性を模したプログラムのことを指すようです!

 

 

うん。

 

あれ、ちょっと待って。人間を模してるんだったら、人間との違いはなんなの?完全じゃないとか体がないとかはやめてね。調べてみました!

 

なんか 大抵の画像処理とか、自然言語処理とかがAIには難しいみたいです!

逆に、大抵の継続的な処理が人間には難しいみたいです!

 

いかがでしたか?AI、すごいですね!!!

 

ビッグデータ

って何?使用用途は?調べてみました!

 

そもそもビッグデータとは、様々な種類の非常に多いデータのことを指すようです!

 

 

すげー

 

なんか便利そうだね。使用用途はなんなの?調べてみました!

 

どうやら、AIにこのビッグデータを処理してもらい、価値のあるデータのみを集めることで、新たな需要やアイデアを見つけることができるみたいです!!!AIさすが!!!

 

いかがでしたか?ビッグデータ、使いこなせれば便利そうですね!!!

 

最後に

こういった形式(って何?うんたかは?調べてみました!いかがでしたか?形式)の記事、調べてみましたじゃなく、調べてまとめてみました!にしてほしいです(批判する意図はありません!)。調べてまとめてくださっているので。みんなー...

 

明日の記事はうえきさん。イブにふさわしい記事を期待したいです。

なんでもいいからアセンブリを読みたいと思ったぜ!!!

う え き ぷ に き あ く ん 笑 Advent Calendar 2021 - Adventar 22日目です

 

思ったので、C言語の配列のアセンブリを読んでいこうと思いますね。

https://godbolt.org/z/35q5Prf93

こちらが今回使用したツール様及びプログラムです。最高のツールです...!

 

C言語のプログラム

以下の通りです。

#include <stdio.h>

int main(){
char a[5];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
a[3] = 'd';
a[4] = 0;
char b[4] = {'x', 'y', 'z', 0};

long c[2];
c[0] = 1234;
c[1] = 1;
printf(a);
printf(b);
printf(c);
return 0;
}
 

アセンブリ版だよ

main:
sub rsp, 72
mov BYTE PTR [rsp+59], 97
mov BYTE PTR [rsp+60], 98
mov BYTE PTR [rsp+61], 99
mov BYTE PTR [rsp+62], 100
mov BYTE PTR [rsp+63], 0
mov DWORD PTR [rsp+55], 8026488
mov QWORD PTR [rsp+32], 1234
mov QWORD PTR [rsp+40], 1
lea rcx, [rsp+59]
call printf
lea rcx, [rsp+55]
call printf
lea rcx, [rsp+32]
call printf
mov eax, 0
add rsp, 72
ret
 

読んでいくぜだよ!!!

本記事内のプログラム内のchar a に対する操作は、C言語では以下の通りです。

char a[5];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
a[3] = 'd';
a[4] = 0;
アセンブリでは以下の通りです。
mov BYTE PTR [rsp+59], 97
mov BYTE PTR [rsp+60], 98
mov BYTE PTR [rsp+61], 99
mov BYTE PTR [rsp+62], 100
mov BYTE PTR [rsp+63], 0
ここで、BYTE PTR [rsp+n]とは、rsp+nのアドレスから始まる、1バイト分のメモリ上の場所のことを指しています。
ASCIIコードは1バイト分のデータなので、char型の配列の各要素の長さも1バイト分確保することが適切と言えます。
また、mov BYTE PTR [rsp+n], xのxはASCIIコードとなっており、対応表と見比べてみるとそれぞれ
97 : a
98 : b
99 : c
100 : d
0 : NULL文字(charの配列の末端を表します)
となり、C言語で指定したものと等しくなります。
次に、
char b[4] = {'x', 'y', 'z', 0};
の部分です。
対応するアセンブリ
mov DWORD PTR [rsp+55], 8026488
となります。
引数の8026488を16進数に変換すると、0x7A7978となります。つまり、0x007A7978です。これを1バイトごとに分割すると0x00 0x7A 0x79 0x78となり、ASCIIコードとの対応は
0x00 = 0 : NULL文字
0x7A = 122 : z
0x79 = 121 : y
0x78 = 120 : x
となっています。これは、実際に格納したい['x', 'y', 'z', 0]とは順番が逆です。しかし、x64環境でのデータの扱い方はリトルエンディアンであることから、実際のデータの扱われ方は適切なものになります(説明が...)。
 
最後に、
long c[2];
c[0] = 1234;
c[1] = 1;
の部分です。これは、
mov QWORD PTR [rsp+32], 1234
mov QWORD PTR [rsp+40], 1
が対応しています。
QWORD PTR [rsp+n]は、rsp+nのアドレスから始まる、8バイト分のメモリ上の場所のことを指しています。
C言語におけるlong型は64bit、つまり8バイトなので、long型の配列の各要素の長さも8バイト分確保することが適切と言えます。
そして、順番に1234、1が格納されます。ここで、1234 < 2^16、1 < 2^8となりますが、型を指定しているため、short intやcharとして扱われず、long型としてしっかりと64bit分メモリが確保されていますね。すごいですね。なんか感動してます。今。
 

おわりぜ

いかがでしたか?なんか アセンブリ読むのめっちゃ楽しいです。皆さんもアセンブリ読みませんか?こんな記事でいいんですか?あと4日しかないのに?まあ、いいか!!!!!!!!

 

明日の記事はうえきさんです。何書くか悩んでいたので、がんばってほしいです!!!するめ

rev問を解こう!

みなさん、CTFやってますか?CTF、楽しいですよね。でもぼくはめっちゃ弱いです(文脈なし)。

本記事は、CTFにおけるrev問を一問解いてみる記事です。

 

問題概要

本記事で解く問題はpicoGymのasm1という問題です。

以下、概要です。

次のプログラムのasm1関数に0x2e0という整数を渡したとき、返り値はどのようになるか。フラグの形式は、0xhex とする。

asm1:
    <+0>:    push   ebp
    <+1>:    mov    ebp,esp
    <+3>:    cmp    DWORD PTR [ebp+0x8],0x3fb
    <+10>:    jg     0x512 <asm1+37>
    <+12>:    cmp    DWORD PTR [ebp+0x8],0x280
    <+19>:    jne    0x50a <asm1+29>
    <+21>:    mov    eax,DWORD PTR [ebp+0x8]
    <+24>:    add    eax,0xa
    <+27>:    jmp    0x529 <asm1+60>
    <+29>:    mov    eax,DWORD PTR [ebp+0x8]
    <+32>:    sub    eax,0xa
    <+35>:    jmp    0x529 <asm1+60>
    <+37>:    cmp    DWORD PTR [ebp+0x8],0x559
    <+44>:    jne    0x523 <asm1+54>
    <+46>:    mov    eax,DWORD PTR [ebp+0x8]
    <+49>:    sub    eax,0xa
    <+52>:    jmp    0x529 <asm1+60>
    <+54>:    mov    eax,DWORD PTR [ebp+0x8]
    <+57>:    add    eax,0xa
    <+60>:    pop    ebp
    <+61>:    ret    

 

という問題です。渡す整数やasm1内の数字は違う場合がありますが、今回はこの数字で解説します。

 

解説を–––––  しますなす🍆

まず、明示こそされていませんが、このプログラムでは引数(0x2e0)は[ebp+0x8]にあります。また、一般的に整数の型は1, 2, 4, 8バイトであることから、DWORD PTR [ebp+0x+8]が0x2e0となっていることがわかります。

あとは指で追いかけながらプログラムを読むと解けます。よっしゃ!

まず、asm1の最初の2行はスタックの操作のための前準備なので、ここでは気にしません。

次の行は、0x2e0 - 0x3fbをしていますが、cmpは結果は保持されないので[ebp+0x8]の値は変更されません。

4行目のjg命令は、zfとsfが0、つまり演算命令の結果が0でも負でもない場合にジャンプするという命令で、一行前のcmp命令で指定されている0x2e0, 0x3fbについて、0x2e0 < 0x3fbなのでzf = 0, sf = 1となっています。そのため、ここでのジャンプは発生しません。

次の5行目では、今度は0x2e0 - 0x280を行っています。cmp命令なので、ここでも結果は破棄されます。

次の6行目の命令は、zfが0のとき、つまり演算処理の引数が等しくない場合にジャンプします。0x2e0 != 0x280のため、ここではジャンプが発生します。ここでのジャンプ先は、<+29>の行、つまり10行目です。

10行目に飛んだのち、まずeaxレジスタに0x2e0が代入されます。アセンブリでは、eaxレジスタの値を返り値として扱うことが多いためです。

次の11行目で、eaxレジスタの値から0xaを減算します。この演算内容は0x2e0 - 0xa = 0x2d6となり、演算結果である0x2d6はeaxレジスタに格納されます。

次の12行目では、無条件のジャンプが発生し、その先は<+60>です。

<+60>以降は、関数の呼び出し元に戻る動作なので、ここでは気にしません。2

最終的な返り値は、eaxレジスタの値になります。つまり、0x2d6です。!!!!、!!!!!!。

実際、フラグ入力欄に0x2d6と入力して送信してみると、正解になりました!うれしい!!!(嬉しいので)

 

最後に

このように、アセンブリで記述されたプログラムも、リバースエンジニアリングの作業も、思ったよりシンプルです。嘘です。ぼくはまだこの世界の深淵に触れていないので、これ以上後書きでは語りませんカタラン数...笑

 

トゥモッッロウの記事はLl_e_ki=サンです。が書きます。

息抜きでやっていること

う え き ぷ に き あ く ん 笑 Advent Calendar 2021 - Adventar 19日目です

いよいよ最後の一週間ですね。頑張って比較的質のいい記事を書いていければなと思います。

 

今から謝罪をしていこうと思います!ごめんなさい。

今日は軽めの記事にします。ぼくがパソコン作業で疲れたときにやっている息抜きについての自分語りを書こうと思います。

 

息抜きの基本の"き"

お手洗いや睡眠、食事や水分補給などはやはり大事になります。

この辺りは、息抜きと人間としての生活を同時に行うことができるので、かなりおトクであるといえます。

基本の"ほ"

おさんぽをしましょう。おさんぽ楽しいらんらたたー。ということです!

ちょっと詳しくかくね

おさんぽは、実はとても大事です。ぼくはこのおさんぽのおかげで、視力やモチベーション、体力を保てていると言っても過言ではないです。これ、もしかしてとても大事ですが当てはまるのはぼくだけですか?えええ...

視力回復

は、おさんぽのときに遠くを見まくることで実現できます。これ、本当に大事で、本当にやった方がいいです。

絶対、遠くを見ながらおさんぽしましょう。

モチベーション

については、ちょっとよくわかりません。が、ぼくにとってのおさんぽは、ただの気分転換ではなく、確実にモチベーションに正の影響を与えています。すげーーー

体力

をおさんぽだけで保てるってどんだけだよ...と思われるかもですが、ごもっともです。いいえ、ごもっともではありません。 ぼくは学生なので、学校様に登校なさられる、れるますことがあるのですが、それとは体を動かすときのなんというか、あれ、あれですよ!えーっと、うーん?(いーん?)そうあれこれあれ!!!えっとね、あーーーーんのー、なんか、「よし!おさんぽいこう!」と思っておさんぽ行くのとではやっぱり違うんです、違うの!!!です!!!!よ!!

 

の"ん"

はないです。おおー

 

明日の執筆erはうえきさんですね!!!すごいぞ、すごい、!!!