我正试图在x86程序集中进行相对跳转,但是我无法让它工作.似乎由于某种原因,我的跳跃不断被重写为绝对跳跃或其他东西.
我正在尝试做的一个简单的示例程序是:
.global main
main:
jmp 0x4
ret
Run Code Online (Sandbox Code Playgroud)
由于jmp指令长4个字节,并且相对跳转偏离跳转地址+ 1,因此这应该是一个奇特的无操作.但是,编译和运行此代码将导致分段错误.
对我来说真正的益智之处在于将它编译到对象级别然后反汇编对象文件显示它看起来像汇编程序正确地执行相对跳转,但是在编译文件之后链接器将其更改为另一种类型的跳转.
例如,如果上面的代码位于名为asmtest.s的文件中:
$gcc -c asmtest.s
$objdump -D asmtest.o
... Some info from objdump
00000000 <main>:
0: e9 00 00 00 00 jmp 5 <main+0x5>
5: c3 ret
Run Code Online (Sandbox Code Playgroud)
这看起来像汇编程序正确地进行了相对跳转,尽管jmp指令充满了0是可疑的.
然后我用gcc链接它然后反汇编它得到了这个:
$gcc -o asmtest asmtest.o
$objdump -d asmtest
...Extra info and other disassembled functions
08048394 <main>:
8048394: e9 6b 7c fb f7 jmp 4 <_init-0x8048274>
8048399: c3 ret
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来像链接器重写了jmp语句,或者将5 in替换为另一个地址.
所以我的问题归结为,我做错了什么?
我是否错误地指定了偏移量?我误解了相对跳跃是如何工作的吗?gcc是否试图确保我的代码中没有做危险的事情?
用于网站配置的Google云存储文档表明,当用户请求没有斜杠的页面时,会为用户插入斜杠.
在实践中产生的结果是它直接重定向到MainPageSuffix页面,而不是仅添加斜杠.
因此,例如,如果您有一个将MainPageSuffix设置为"index.html"的存储桶,并且已提供文件/folder/index.html.访问/文件夹/将直接提供文件,但访问/文件夹将301重定向到/folder/index.html而不是/ folder /.
是否可以配置或以某种方式强制/文件夹将您重定向到/文件夹/而不是直接到文件?