小编Wei*_* Hu的帖子

Linux reboot()系统调用的幻数

Linux编程接口在第3章中有一个练习,如下所示:

当使用Linux特有重新启动()系统调用来重新启动系统,第二个参数,magic2,必须被指定为一组幻数(例如,LINUX_REBOOT_MAGIC2)中的一个.这些数字有什么意义?(将它们转换为十六进制提供了线索.)

该手册页告诉我们magic2可以LINUX_REBOOT_MAGIC2(672274793),LINUX_REBOOT_MAGIC2A(85072278),LINUX_REBOOT_MAGIC2B(369367448),或LINUX_REBOOT_MAGIC2C(537993216)之一.我没能用十六进制解读它们的含义.我也看了一下/usr/include/linux/reboot.h,也没有给出任何有用的评论.

然后我在内核的源代码中搜索了它sys_reboot的定义.我发现的只是头文件中的声明.

因此,我的第一个问题是,这些数字有什么意义?我的第二个问题是,在哪里sys_reboot定义,你是如何找到它的?

编辑:我在中找到了定义kernel/sys.c.我只是贪图sys_reboot,忘了grep的MAGIC数字.我认为定义必须隐藏在一些宏技巧背后,所以我查看了下面的System.map文件/boot,并在旁边找到它ctrl_alt_del.然后我抓住那个符号,这导致我找到了正确的文件.如果我从源代码编译内核,我可以尝试找到定义符号的对象文件,并从那里开始.

linux system-calls linux-kernel

67
推荐指数
2
解决办法
2万
查看次数

bzr pull vs bzr merge

我正在使用bzr执行一项非常简单的任务:获取GNU Emacs的开发版本.在最初之后bzr branch,我想保持我的本地版本是最新的.我阅读上的文档bzr pullbzr merge,但不能弄明白它.我试bzr merge了几天,发现bzr merge经常导致无法解决的冲突.请注意,我没有进行任何本地更改.是bzr pull推荐的方式吗?

编辑1(添加了从Chris Conway窃取的图表):

remote: A --> B --> C --> D
         \                 \
       (branch)           (merge)
           \                  \
local:      \--> A (no change) \--> why conflicts?
Run Code Online (Sandbox Code Playgroud)

我理解git和darcs,但对bzr一无所知.类比git或darcs会有很大帮助.

编辑2:update应该checkout只与谁合作?这样做的update一个branch似乎没有做任何事情.

version-control bazaar

17
推荐指数
1
解决办法
8502
查看次数

Emacs:在评论中仅突出显示TODO**

这个问题与左边的另一个问题Emacs:TODO指标有关.我最近遇到了一个小模式,我喜欢很多名为FixmeMode的模式.它支持自动突出显示TODO标记,并在它们之间导航.但是,我认为仅在注释中识别"TODO"字符串更有意义,而不是污染整个文件.可能吗?

emacs comments elisp highlighting todo

17
推荐指数
1
解决办法
5153
查看次数

svn log/diff前端像gitk?

我想研究一下由SVN管理的谷歌Chrome源代码所做的更改.可以在http://src.chromium.org/viewvc/chrome/找到网络界面.

我想知道是否有一个GUI前端允许我在本地检查时间线.用git我可以简单地运行gitk foo.c.

我尝试过qsvn和rapidsvn,但无法弄清楚如何让他们完成这项工作.看来我必须在GUI中导入存储库,但我已经检出了存储库.

svn user-interface rapidsvn

14
推荐指数
2
解决办法
7885
查看次数

防止"hg status"显示未跟踪目录下的所有内容

我发现hg status未跟踪目录的输出太冗长了.假设我有多数民众赞成双方管理的空库githg.所以会有两个目录,.git.hg.

输出git status是:

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   .hg/
Run Code Online (Sandbox Code Playgroud)

输出hg status是:

? .git/HEAD
? .git/config
? .git/description
? .git/hooks/applypatch-msg.sample
? .git/hooks/commit-msg.sample
? .git/hooks/post-commit.sample
? .git/hooks/post-receive.sample
? .git/hooks/post-update.sample
? .git/hooks/pre-applypatch.sample
? .git/hooks/pre-commit.sample
? .git/hooks/pre-rebase.sample
? .git/hooks/prepare-commit-msg.sample
? .git/hooks/update.sample
? .git/info/exclude
Run Code Online (Sandbox Code Playgroud)

有没有办法将其输出减少到类似下面的行?

? .git/
Run Code Online (Sandbox Code Playgroud)

mercurial

13
推荐指数
2
解决办法
7414
查看次数

go编译器生成的汇编代码中的这种模式是什么?

我在Linux内核中调试了一个无关紧要的问题,看到由主管管理的etcd进程反复出现页面错误异常并接收到SIGSEGV.

我好奇并使用objdump来反汇编程序,并发现错误的amd64指令是:

89 04 25 00 00 00 00    mov    %eax,0x0
Run Code Online (Sandbox Code Playgroud)

然后我看了一个hello world程序的反汇编.我在go编译器生成的代码中看到了一个非常常见的模式,即在函数结束时ret,mov紧接着,然后jmp返回函数.例如,

0000000000400c00 <main.main>:
  400c00:       64 48 8b 0c 25 f0 ff    mov    %fs:0xfffffffffffffff0,%rcx
  400c07:       ff ff
        ...
  400c4b:       48 83 7c 24 48 00       cmpq   $0x0,0x48(%rsp)
  400c51:       74 59                   je     400cac <main.main+0xac>
  400c53:       48 c7 04 24 c0 fc 47    movq   $0x47fcc0,(%rsp)
  400c5a:       00

        ...
  400cab:       c3                      retq
  400cac:       89 04 25 00 00 00 00    mov    %eax,0x0
  400cb3:       eb …
Run Code Online (Sandbox Code Playgroud)

assembly go

7
推荐指数
1
解决办法
221
查看次数