Guest User

Untitled

a guest
Jun 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. #!/usr/bin/newlisp
  2.  
  3. ;; 共有ライブラリからの返り値が文字列のポインタだったりすると
  4. ;; アーキテクチャによって型のサイズが違うので処理が面倒だねという話。
  5.  
  6. ;; len_void* == sizeof(void *);
  7. (cond
  8. ;; 64-bit
  9. ((= 256 (& 256 (sys-info 9)))
  10. (define get-ptr get-long)
  11. (define len_void* 8))
  12. ;; 32-bit
  13. (true
  14. (define get-ptr get-int)
  15. (define len_void* 4)))
  16.  
  17. (define NULL 0)
  18. (import "./environ.so" "envp") ; 付属のenviron.cからshared-objectファイルを作成しておく
  19. (import "libc.so.6" "puts")
  20. (import "libc.so.6" "printf")
  21.  
  22. (setf environ (envp))
  23.  
  24. (while (!= (get-ptr environ) NULL)
  25. (printf "%s\n" (get-ptr environ))
  26. (++ environ len_void*)
  27. )
  28.  
  29. (exit)
Add Comment
Please, Sign In to add comment