現在のプログラムの仮想メモリの内容を0x10000
から0x50000
(システム上のシステムコールトランポリンを含む領域)に印刷したいと考えています。私はそのエラーになってるコンパイルしようとしたときにfmt.Println()メモリは、goプログラムによって割り当てられていないのですか?
package main
import (
"syscall"
"unsafe"
)
func main() {
syscall.Syscall(SYS_WRITE, uintptr(1), uintptr(unsafe.Pointer(0x10000)), uintptr(0x40000))
}
は、しかし:私の場合は
cannot convert 65536 (type int) to type unsafe.Pointer
を、cgo
は(import "C"
は、コンパイル時に失敗した)無効になっています。
また、syscall.Syscall(SYS_WRITE
はそれを行う唯一の方法ですか?
私はゴランで知っています。私はこれが境界外の読み取りと見なすことができることを知っていますが、これは特定のシステムコールが有効かどうかを知るために必要です。 – user2284570