Skip to content

Instantly share code, notes, and snippets.

@msymt
msymt / cpp-toolbox.md
Last active March 7, 2020 05:33
オレオレ用C++のtipsのようなもの

C++の入出力やデータを扱う上で役に立ったもの

実験で正文/非文判定をするプログラムを書いた時に役に立ったものをつらつらとまとめていく。

テキストファイルからデータを読み込

std:cin.rdbuf

std::ifstream in("filename.txt");
@msymt
msymt / c-pointer.md
Last active March 3, 2020 12:32
C:ポインタ再入門

C ポインタ再入門

環境

$ uname -a
Linux 5.0.0-37-generic #40~18.04.1-Ubuntu SMP Thu Nov 14 12:06:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

ポインタ型には、ポインタ型の変数ポインタ型の値が存在.

We couldn’t find that file to show.
@msymt
msymt / pip-manage.md
Last active April 25, 2020 03:10
pipがぶっ壊れた時用

エラー内容

$ pip
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 11, in <module>
    sys.exit(main())
TypeError: 'module' object is not callable

@msymt
msymt / gist:57e1ae7b625c2434aaefe74a79da5c45
Last active January 12, 2020 05:10
関数呼び出しとlibc
00000000004005e0 <printf@plt>:
  4005e0:       ff 25 3a 0a 20 00       jmp    QWORD PTR [rip+0x200a3a]        # 601020 <printf@GLIBC_2.2.5>
  4005e6:       68 01 00 00 00          push   0x1                             # rip+0x200a3a(601020) : 4005e6
  4005eb:       e9 d0 ff ff ff          jmp    4005c0 <.plt>
////
0000000000400782 <main>:
  4007bb:       b8 00 00 00 00          mov    eax,0x0
  4007c0:       e8 1b fe ff ff          call   4005e0 <printf@plt>
  4007c5:       48 8d 45 e0             lea    rax,[rbp-0x20]
@msymt
msymt / vector_memory_location_conflict.md
Last active January 9, 2020 15:06
C++でのアドレス衝突問題

何が起きたか

CKYアルゴリズムをC++で書いていた際に、std::vector<vector> cky という2次元vectorを用意し cky.numberというメンバに 数値を代入していたところ、ある座標が同じメモリアドレスをさしていたことが判明。

具体的には、

0x7fa877c02dd0 0x7fa877c02e38 0x7fa877c02ea0 0x7fa877c02f08 0x7fa877c02f70 0x7fa877c02fd8 0x7fa877c03040 
0x7fa877c02ea8 0x7fa877c02f10 0x7fa877c02f78 0x7fa877c02fe0 0x7fa877c03048 0x7fa877c030b0 
@msymt
msymt / stack-alignment.md
Last active January 12, 2023 04:48
スタックのアラインメント

x86-64モード用の呼び出し規約では、浮動小数点数の受け渡しはxMM0などのレジスタを用います. メモリとxMM0系のレジスタ間で値を転送する命令(MOVAPSMOVAPDなど)は、メモリ上の値が16バイト境界に配置されていることを要求します.
コンパイラは、関数呼び出し時のスタックポインタが16バイト整列されていることを前提に,MOVAPSMOVAPD命令を発行します. また、他の関数を呼び出すときには必ずスタックポインタが16バイト整列するように調整する責任があります.
(http://uchan.hateblo.jp/entry/2018/02/16/232029)

CTFにおいては

0x10の境界にないとき、system等がmovapsが原因で失敗する為、retで揃える事がある.

@msymt
msymt / extended_property.kt
Last active May 26, 2020 08:55
拡張プロパティ
val String.lastChar: Char
get() = get(length - 1)
var StringBuilder.lastChar: Char
get() = get(length - 1)
set(value: Char) {
this.setCharAt(length - 1, value)
}
/*
@msymt
msymt / mutablelist.kt
Created May 27, 2020 02:29
ジェネりくすと拡張関数
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val tmp = this[index1]
this[index1] = this[index2]
this[index2] = tmp
}
/*
参考
@msymt
msymt / method.md
Last active September 5, 2022 13:29
IntelliJ IDEAでバックスラッシュ(\)を打つ方法

IntelliJ IDEAでバックスラッシュ(\)を打つ方法

環境

IntelliJ IDEA 2020.1.1 (Community Edition)
Build #IC-201.7223.91, built on April 30, 2020
Runtime version: 11.0.6+8-b765.40 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.4
GC: ParNew, ConcurrentMarkSweep