Utilización de expresiones adb

En esta sección se describe el uso de expresiones adb .

Utilización de enteros en expresiones

Al crear una expresión, puede utilizar enteros en tres formatos: decimal, octal y hexadecimal. Los enteros decimales deben empezar con un dígito decimal distinto de cero. Los números octales deben empezar con un 0 (cero) y tener sólo dígitos octales (0-7). Los números hexadecimales deben empezar con el prefijo 0x y pueden contener dígitos decimales y las letras de la a a la f (en mayúsculas y minúsculas). A continuación se muestran ejemplos de números válidos:

Decimal         Octal            Hexadecimal
34              042              0x22
4090            07772            0xffa

Utilización de símbolos en expresiones

Los símbolos son los nombres de las variables globales y las funciones definidas dentro del programa que se está depurando. Los símbolos son iguales a la dirección de la variable o función dada. Se almacenan en la tabla de símbolos de programa y están disponibles si la tabla de símbolos no se ha quitado del archivo de programa.

En las expresiones, puede escribir el símbolo exactamente como está en el programa fuente o como se ha almacenado en la tabla de símbolos. Los símbolos de la tabla de símbolos no tienen más de 8 caracteres de longitud.

Cuando se utiliza ? , el programa adb utiliza los símbolos que se encuentran en la tabla de símbolos del archivo de programa para crear direcciones simbólicas. Por lo tanto, ? subcomando a veces da un nombre de función al visualizar datos. Esto no sucede si ? El submandato se utiliza para texto (instrucciones) y el mandato / se utiliza para datos.

Las variables locales sólo se pueden abordar si el programa fuente de lenguaje C se compila con el distintivo -g .

Si el programa fuente de lenguaje C no se compila utilizando el distintivo -g , la variable local no se puede abordar. El mandato siguiente muestra el valor de la variable local b en un ejemplo de función:

.sample.b / x - value of local variable.
.sample.b = x - Address of local variable.

Utilización de operadores en expresiones

Puede combinar enteros, símbolos, variables y nombres de registro con los operadores siguientes:

Operadores unarios:   
~ (tilde) Complementación bit a bit
- (guión) Negación de entero
* (asterisco) Devuelve el contenido de la ubicación
Operadores binarios:   
+ (más) Suma
- (menos) Resta
* (asterisco) Multiplicación
% (porcentaje) División de enteros
& (ampersand) Conjunción bit a bit
] (corchete derecho) Disyunción a nivel de bit
^ (signo de intercalación) Módulo
# (signo de almohadilla) Redondear al siguiente múltiplo

El programa de depuración adb utiliza la aritmética de 32 bits. Los valores que superan los 2.147.483.647 (decimal) se muestran como valores negativos. El ejemplo siguiente muestra los resultados de asignar dos valores diferentes a la variable ny, a continuación, visualizar el valor en decimal y hexadecimal:

2147483647>n<
n=D
    2147483647<
n=X
    7fffffff
2147483648>n<
n=D
    -2147483648<
n=X
    80000000

Los operadores unarios tienen una prioridad mayor que los operadores binarios. Todos los operadores binarios tienen la misma prioridad y se evalúan en orden de izquierda a derecha. Por lo tanto, el programa adb evalúa las siguientes expresiones binarias tal como se muestra:

2*3+4=d
    10
4+2*3=d
    18

Puede cambiar la prioridad de las operaciones en una expresión utilizando paréntesis. El ejemplo siguiente muestra cómo se cambia la expresión anterior utilizando paréntesis:

4+(2*3)=d
    10

El operador unario, * (asterisco), trata la dirección dada como un puntero en el segmento de datos. Una expresión que utiliza este operador es igual al valor al que apunta ese puntero. Por ejemplo, la expresión:

*0x1234

es igual al valor de la dirección de datos 0x1234, mientras que el ejemplo:

0x1234

es igual a 0x1234.