// 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;
}
Я не уверен, что это соответствует вашим потребностям, но вы можете сделать это (для двоичного файла без 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 ничего об этом не знает и будет игнорировать это:
С помощью сценария компоновщика должна быть возможность поместить символ mylabel
в раздел, который не загружен, чтобы уменьшить накладные расходы времени выполнения.