我们的内部程序是用 C 编写的,并广泛使用了snprintf()许多部分,我注意到在使用性能记录/报告进行调试期间,它在以下方面花费了大量时间:
\xe2\x94\x82 _IO_vfprintf_internal(): \xe2\x96\x92\n \xe2\x94\x82 mov -0x510(%rbp),%rdx \xe2\x96\x92\n \xe2\x94\x82 mov %r12,%rsi \xe2\x96\x92\n \xe2\x94\x82 mov %r15,%rdi \xe2\x96\x92\n \xe2\x94\x82 \xe2\x86\x92 callq *0x38(%rax) \xe2\x96\x92\n \xe2\x94\x82 cmp %rax,-0x510(%rbp) \xe2\x96\x92\n \xe2\x94\x82 mov -0x530(%rbp),%r9 \xe2\x96\x92\n \xe2\x94\x82 \xe2\x86\x91 jne 91a \xe2\x96\x92\n \xe2\x94\x82 mov -0x4d0(%rbp),%esi \xe2\x96\x92\n \xe2\x94\x82 mov -0x540(%rbp),%ecx \xe2\x96\x92\n \xe2\x94\x82 mov $0x7fffffff,%eax \xe2\x96\x92\n \xe2\x94\x82 sub %esi,%eax \xe2\x96\x92\n \xe2\x94\x82 add %esi,%ecx \xe2\x96\x92\n \xe2\x94\x82 cltq \xe2\x96\x92\n \xe2\x94\x82 cmp %rax,-0x510(%rbp) \xe2\x96\x92\n \xe2\x94\x82 \xe2\x86\x91 jbe 252b \xe2\x96\x92\n \xe2\x94\x82 \xe2\x86\x91 jmpq 28f0 \xe2\x96\x92\n \xe2\x94\x824a70: xor %eax,%eax \xe2\x96\x92\n …Run Code Online (Sandbox Code Playgroud) 我的应用程序建立在较旧的环境上,不支持更新(特定)的系统调用.我不能因为我无法透露的原因而升级它们,但不是让它编译时间(这会损失任何'好处')我想知道是否有办法在内联汇编.例如:
#include <syscall.h>
static int function() {
int z;
#ifdef SYS_some_system_call
do_this(some_newer_syscall);
z=1;
#else
do_that(older_syscall);
z=0;
#endif
}
Run Code Online (Sandbox Code Playgroud)
有没有办法检查汇编中的系统调用支持并使用它(第一次)?
我有一个程序的共享对象,我需要将指令从'jne/je'更改为jmp.我试图环顾四周,例如关于如何使用LD_PRELOAD进行此操作或无济于事.