Skip to main content

ptrace 在 linux 和 freebsd 下的若干区别 | Several differences of ptrace between Linux and FreeBSD

最近要把一个程序移植到Debian-kfreebsd上,并不如想象中的顺利。
主要是ptrace在两个平台上不太一样。

首先是宏定义,linux底下都叫PTRACE_*,freebsd上都是PT_*。这个也许不算什么

然后是ptrace函数的参数,主要是value这个,linux下面是long很好用,但是freebsd下是int,这样64位的时候就有些问题。

但是freebsd的ptrace有个更好用的操作PT_IO,可以自定义读写长度,而linux底下没有,要自己搞。

最后一个,花了我很长时间才解决的,是CONTINUE这个操作,linux下面addr这个参数是被忽略的,直接从中断的地方继续;但是freebsd下面则可以利用这个参数指定从哪里继续,如果希望从中断的地方继续,则指定为1即可。

目前只遇到这些,从这些方面来看,还是freebsd的接口更好用一些。



Recently I've been porting a software from Linux to Debian-kfreebsd, but it's not as easy as I had expected. The problem is the interface of ptrace is not exactly the same between linux and kfreebsd.

The first is the names of the macros, which are PTRACE_* under linux and PT_* under freebsd.

Secondly the function `ptrace' is not the same, the parameter `value' is `long' under Linux, but `int' under freebsd, so it seems that there'll be a problem on 64 bit freebsd.

However, there's another operation called PT_IO under freebsd, using which we can specify the number of bytes we want to read or write.

The last and the most annoying one I've met, is the parameter `addr' for the CONTINUE operations. Under linux this parameter is ignored, and the child process will continue at where it had been interrupted; but under freebsd, we can specify this location by setting this parameter, and we can also let it continue at where it had been interrupted but setting the value to 1.

Now that's all for my program, and it seems that the interface under freebsd is better than that under linux.

Comments

Popular posts from this blog

A Rocky Migration: Moving from docker-compose to Podman and gVisor

I've been running a few containers for several years. They were all running under rootless Docker with a single user. Initially, I planned to  migrate the containers to VMs , but I couldn't get a stable workflow after about two months of effort. Later,  gVisor caught my attention , and I decided to migrate to Podman with gVisor instead. The new plan is to run each container with  --userns=auto  and use Quadlet for systemd integration. This approach provides better isolation and makes writing firewall rules easier. I'm now close to migrating all my containers. Here are a couple of rough edges I'd like to share. Network Layout I compared  various networking options  and spent a few hours trying the one-interface-per-group approach before giving up. I settled on a single macvlan network and decided to use static IP addresses for my containers. To prevent a randomly assigned IP address from conflicting with a predefined one, I allocated a large IP range for my ...

GameConqueror 0.09 -- Linux Game Hacking Tool

If you are a game hacker If you've been looking for a `CheatEngine for Linux` Then you can't miss this. ============================================== GameConqueror is a game hacking tool for linux, it's written in PyGTK and uses scanmem as its backend. It's supposed to be with most useful features of CheatEngine for Linux. Currently, I've implemented almost everything about scanning, involving variant data types and scan types: Data Types: int{8/16/32/64}, float{32/64}, unknown type(int or float) and unknown width(will try each of them), byte array and string Scan Types: equal, greater, less, changed, unchanged, increased(by), decreased(by) This should be enough for most cases, so I decided to release it at the current status. ============================================= Here's how you can get it PPA (for Ubuntu users) https://launchpad.net/~coolwanglu/+archive/scanmem (I've not test it in 32bit environments or Jaunty, do please inform me if it doe...

Exploring Immutable Distros and Declarative Management

My current server setup, based on Debian Stable and Docker, has served me reliably for years. It's stable, familiar, and gets the job done. However, an intriguing article I revisited recently about Fedora CoreOS, rpm-ostree, and OSTree native containers sparked my curiosity and sent me down a rabbit hole exploring alternative approaches to system management. Could there be a better way? Core Goals & Requirements Before diving into new technologies, I wanted to define what "better" means for my use case: The base operating system must update automatically and reliably. Hosted services (applications) should be updatable either automatically or manually, depending on the service. Configuration and data files need to be easy to modify, and crucially, automatically tracked and backed up. Current Setup: Debian Stable + Docker My current infrastructure consists of several servers, all running Debian Stable. System Updates are andled automatically via unattended-upgrades. Se...