Как сделать локальные метки в выводе GNU GAS ELF, которые GDB может разбить, но не считать как функции?

// Program to print a matrix in spiral order

#include <stdio.h>
int main(void) {
    // your code goes here
    int m,n,i,j,k=1,c1,c2,r1,r2;;
    scanf("%d %d",&m,&n);
    int a[m][n];
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    r1=0;
    r2=m-1;
    c1=0;
    c2=n-1;

    while(k<=m*n)
                {
                    for(i=c1;i<=c2;i++)
                    {
                        k++;
                        printf("%d ",a[r1][i]);
                    }

                    for(j=r1+1;j<=r2;j++)
                    {
                        k++;
                        printf("%d ",a[j][c2]);
                    }

                    for(i=c2-1;i>=c1;i--)
                    {
                        k++;
                        printf("%d ",a[r2][i]);
                    }

                    for(j=r2-1;j>=r1+1;j--)
                    {
                        k++;
                        printf("%d ",a[j][c1]);
                    }

                 c1++;
                 c2--;
                 r1++;
                 r2--;
                }
    return 0;
}
2
задан Ciro Santilli 新疆改造中心996ICU六四事件 22 March 2019 в 14:02
поделиться

1 ответ

Я не уверен, что это соответствует вашим потребностям, но вы можете сделать это (для двоичного файла без PIE, так что ссылка с -no-pie):

.text
.global _start
_start:
    /* exit */
    mov $60, %rax
.Lmylabel:
    mov [110], %rdi
    syscall
    .section .rodata
mylabel:
    .long .Lmylabel

Затем, вы можете установить точка останова с использованием break *mylabel (обратите внимание на *):

(gdb) break *mylabel
Breakpoint 2 at 0x401007: file t.S, line 7.

Поскольку mylabel является более или менее указателем на функцию, GDB ничего об этом не знает и будет игнорировать это:

[ 112]

С помощью сценария компоновщика должна быть возможность поместить символ mylabel в раздел, который не загружен, чтобы уменьшить накладные расходы времени выполнения.

0
ответ дан Florian Weimer 22 March 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: